[C++] double pointer 동적할당

MURRAIYA·2024년 2월 28일
0

더블포인터, 포인터의 포인터는 예상하건데 다른 포인터의 주소를 가지는 포인터일 것이다.

int value=5;

int* ptr = &value;
std::cout<<*ptr;

int** ptrptr = &ptr; //pointer의 주소
std::cout<<**ptrptr;

//5
//5

이중포인터는 포인터의 주소를 저장하며

일반 포인터처럼 동작한다.

int value = 5;
int** ptrptr= &&value; //not valid

이딴 짓은 할 수 없다.

&연산자는 l-value가 필요한데 &뒤의 &value는 r-value이기 때문이다.

int** ptrptr = nullptr; //경우에 따라 0일 수 있음.

이중포인터를 null로 설정할 수 있다.

동적할당

필요한 메모리 공간이 예측되지 않는 경우에 프로그램 작성 시 할당받지 않고

실행 중에 운영체제로부터 할당받게 하는 방법

운영체제가 관리하는 heap(물론 RAM위에 있음)으로부터 할당

new 연산자로 할당 후 delete 연산자로 메모리 힙에 반환

데이터타입 *포인터변수 = new 데이터타입;
delete 포인터변수; //포인터 안에 저장된 heap의 주소값을 지운다는 의미. 포인터변수 자체는 여전히 존재.

2차원 배열 동적할당

포인터는 동적할당시에 쓰인다.

이중 포인터는 2차원 동적할당에 이용한다.

int array[10][5]; 

고정 배열은 아주 행복하다.

int** array = new int[10][5]; 

슬프게도 이딴건 안통한다.

만약 마지막 차원이 constant라면 이런 방식이 가능하다.

int(*array)[5]=new int[10][5];

슬프게도 마지막 차원이 constant가 아니라면 복잡하다.

int** array = new int*[10]; //rows
for (int count =0; count<10; ++count)
	array[count] = new int[5]; //columns

이렇게 한 다음 배열 접근은 일반적으로 할 수 있다.

array[9][4] = 3;

2차원 동적 할당은 해제도 loop가 필요하다.

할당한 순서의 반대로 해제한다.

for(int count=0; count<10; ++count)
	delete array[count];
delete array;
profile
🙃SUJI KIM🙃 🚩 Inha University Undergraduate 🚗 Autonomous Driving Robots 📷 Computer Vision 💫 SLAM

0개의 댓글