본문 바로가기

Programming/C++ 2

[C++ 실습] 4장-07. 포인터와 메모리 해제

반응형
#include <iostream>
using namespace std;
int main()
{
	int donuts = 6; //4바이트 자료형
	double cups = 4.5; //8바이트 자료형

	cout << "cups의 값= " << cups;
	cout << ", cups의 주소= " << &cups << endl;
	cout << "donuts의 값= " << donuts;
	cout << ", donuts의 주소= " << &donuts << endl;
	return 0;
}

-> & [주소연산자] : 변수 앞에 붙이면 그 변수의 주소

-> * [역참조 연산자] : 포인터 앞에 붙이면 그 주소에 저장되어 있는 값

 

->8바이트 차이 [double]

-> 4바이트 차이 [int]

-> 컴파일러에 따라 다르다


#include <iostream>
using namespace std;
int main_pointer()
{
	int updates = 6; //int형 변수를 선언
	int* p_updates; //in형을 지시하는 포인터를 선언

	p_updates = &updates; //int형의 주소를 포인터에 대입

	//값을 두 가지 방법으로 표현
	cout << "값 : updates = " << updates;
	cout << ", p_updates= " << p_updates << endl;

	//주소를 두 가지 방법으로 표현
	cout << "주소: &update : " << &updates;
	cout << ", p_updates = " << p_updates << endl;

	//포인터를 사용하여 값을 변경
	*p_updates = *p_updates + 1;
	cout << "변경된 updates= " << updates << endl;


	return 0;
}

int jumbo = 23;
int* pe=&jumbo;
jumbo   &jumbo
*pe pe
값 23 주소 0x2ac8
모두 같은 값을 나타낸다 모두 같은 주소를 나타낸다.

포인터 선언과 초기화

#include <iostream>
using namespace std;
int main()
{
	int higgens = 5;
	int* pt = &higgens;

	cout << "higgens의 값= " << higgens << ", higgens의 주소 = " << &higgens << endl;
	cout << "*pt의 값= " << *pt << ", pt의 값 = " << pt << endl;
	return 0;
}

-> higgens의 주소와 pt의 주소가 같다.

-> 포인터를 사용하기 전에 반드시 포인터를 &로 초기화해야 한다.

 


#include <iostream>
using namespace std;
int main()
{
	int nights = 1001;
	int* pt = new int; //int형을 저장할 메모리를 대입
	*pt = 1001; //대입된 메모리에 값을 저장

	cout << "nights의 값 = ";
	cout << nights << ": 메모리 위치" << &nights << endl;
	cout << "int 형";
	cout << "값 = " << *pt << ": 메모리 위치 = " << pt << endl;

	double* pd = new double; //double형을 저장할 메모리를 대입
	*pd = 10000001.0; //그 메모리에 double형 값을 저장
	
	cout << "double 형 ";
	cout << "값 = " << *pd << " : 메모리 위치= " << pd << endl;
	cout << "포인터 pd의 메모리 위치 : " << &pd << endl;
	cout << "pt의 크기 = " << sizeof(pt);
	cout << ": *pt의 크기 = " << sizeof(*pt) << endl;
	cout << "pd의 크기 = " << sizeof(pd);
	cout << ": *pd의 크기 = " << sizeof(*pd) << endl;

	return 0;
}

-> 포인터형의 크기 : 4Byte

-> int형 크기 : 4Byte, double형 크기 : 8Byte


#include <iostream>
using namespace std;
int main()
{
	double* p3 = new double[3]; //double형 데이터 3개 저장가능한 공간 대입

	p3[0] = 0.2;
	p3[1] = 0.5;
	p3[2] = 0.8;
	cout << "p3[0]은 " << p3[0] << "입니다." << endl;
	cout << "p3[1]은 " << p3[1] << "입니다." << endl;
	p3 = p3 + 1; // 포인터를 증가시킨다.
	cout << "이제는 p3[0]은 " << p3[0] << "이고" << endl;
	cout << "p3[1]이 " << p3[1] << "입니다. " << endl;

	p3 = p3 - 1; //다시 시작 위치를 지시
	cout << "p3[0]은 " << p3[0] << "이고" << endl;
	cout << "p3[1]이 " << p3[1] << "입니다. " << endl;

	delete[] p3; //배열 메모리를 해제

	return 0;
}

-> p3=p3+1; : p3가 포인터면 값 변경 가능 / p3가 배열이면 값 변경 불가능 [상수이기 때문에]

반응형