Search
Duplicate

2차원 배열과 2차원 포인터의 차이

간단소개
 배열이랑 포인터 똑같은거 아님?
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
C++
Scrap
태그
배열
포인터
9 more properties

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

배열 표기
array[1][1] = 23;
C++
복사
포인터 표기
*(*(array+1)+1) = 23;
C++
복사
둘 다 동일하다. 그러나 표기법이 같다고 구조가 동일한것은 아니다.
array 배열은 표기는 2차원이지만 1차원 배열인 array[6]과 동일한 형태이다.
array[0]와 array[1]이 연결되어있기때문에 array[1]의 주소를 저장하기위한 추가 메모리가 필요하지 않다.
추가적으로 array[1] 의 항목들을 array[0]를 사용하여 접근 가능하다.
array[1][0] 는 array[0][3]~~ 이런식. 주소가 연속적이기때문.
반면 포인터는 다음 포인터로 이동하기위해, 메모리의 주소가 저장되어야한다.
메모리 블록들이 연속하지 않기때문에 포인터로 연결해야하는 구조이다.
포인터 p는 노란색 메모리의 시작 주소를, 노란색 메모리는 각 빨간색 메모리의 시작 주소를 가르킨다.
그렇기때문에 2차원 배열에서는 없던 3칸의 메모리가 추가로 필요하다.
따라서 아래의 코드는 오류가 발생한다.
char array[2][3]; char **p; p = array; //error 자료형 불일치
C++
복사

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

추가적으로, 2차원 배열을 2차원 포인터로 접근하는 방법이다.
char array[2][3]; char *p; p = (char *)array;
C++
복사
char array[2][3]; char (*p)[3]; p = array;
C++
복사