이중 포인터
#define _CRT_SECURE_NO_WARNINGS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main() {
int** pptr;
pptr = new int* [4];
pptr[0] = new int[4];
pptr[1] = new int[2];
pptr[2] = new int[5];
pptr[3] = new int;
delete[] pptr[0];
delete[] pptr[1];
delete[] pptr[2];
delete pptr[3];
delete[] pptr;
_CrtDumpMemoryLeaks();
return 0;
}
포인터와 배열은 서로 호환적이다. 그래서 이중 포인터를 이차원 배열로 본다면 행과 열을 가변적으로 둘 수 있는 이차원 배열처럼 쓸 수 있다. 다만 포인터 이기에 4byte 공간만을 차지하며 실제 사용할 때는 동적할당을 통해 사용한다.
위의 예제처럼 이중포인터는 이중포인터 자체에 한번, 인덱스마다 한번해서, 할당도 해제도 두번에 걸쳐한다.
포인터 배열
#define _CRT_SECURE_NO_WARNINGS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main() {
int* ptr[3];
ptr[0] = new int[7];
ptr[1] = new int;
ptr[2] = new int[6];
delete[] ptr[0];
delete ptr[1];
delete[] ptr[2];
_CrtDumpMemoryLeaks();
return 0;
}
반면 포인터 배열은 행이 고정된 이차원 배열처럼 사용할 수 있다, 열은 가변적으로 할당 가능하다. 이와 반대개념인 배열 포인터라는 것도 있는데 잘 사용하지는 않는다.
위의 이중포인터와 다른 점은 int* ptr[3] 은 정적메모리에 올라간 거라서 각 인덱스에 동적할당 해준것만 해제하면 된다.
'프로그래밍 > C++' 카테고리의 다른 글
범위기반 for문, 문자열에서 문자 반복 (0) | 2023.03.25 |
---|---|
C 와 C++ 으로 10진수를 2진수로 변환하여 출력하기 (0) | 2022.09.01 |
C++ ] 교통사고 통계자료 필터 프로그램 (2) - vector 사용 , 파입입출력 (0) | 2022.06.28 |
C++ ] 2021 교통사고 통계자료 필터 프로그램 (1) + 파일 입출력 (0) | 2022.06.28 |
C++ ] 상속을 이용한 주차타워 (0) | 2022.06.24 |