[c/c++] 2차원 배열과 2차원 포인터의 차이

모험가·2022년 6월 11일
0

c++

목록 보기
2/4

- 표기법은 같다! 그러나 구조는 다르다.

배열표기

array[1][1] = 23;

포인터표기

*(*(array+1)+1) = 23;

  • 2차원 배열

array 배열은 표기는 2차원이지만 1차원 배열인 array[6]과 동일한 형태이다.
array[0]와 array[1]이 연결되어있기때문에 array[1]의 주소를 저장하기위한 추가 메모리가 필요하지 않다.
추가적으로 array[1] 의 항목들을 array[0]를 사용하여 접근 가능하다.
array[1][0] 는 array[0][3]~~ 이런식. 주소가 연속적이기때문.


  • 2차원 포인터

반면 포인터는 다음 포인터로 이동하기위해, 메모리의 주소가 저장되어야한다.

메모리 블록들이 연속하지 않기때문에 포인터로 연결해야하는 구조이다.

포인터 p는 노란색 메모리의 시작 주소를, 노란색 메모리는 각 빨간색 메모리의 시작 주소를 가르킨다.

그렇기때문에 2차원 배열에서는 없던 3칸의 메모리가 추가로 필요하다.


따라서 아래의 코드는 오류가 발생한다.

char array[2][3];
char **p;
p = array; //error 자료형 불일치

결론 : 2차원 배열을 2차원 포인터로 가르킬 수 없음

추가적으로, 2차원 배열을 2차원 포인터로 접근하는 방법이다.

char array[2][3];
char *p;
p = (char *)array;
char array[2][3];
char (*p)[3];
p = array;
profile
부산 싸나이의 모험기

0개의 댓글