본문 바로가기

C언어 프로그래밍

C언어 요약 내용 -2


다차원 배열(2차원 이상)

 

2차원 배열 이름 +1 : 배열 이름을 이용한 포인터 연산


포인터의 타입에는 이동에 대한 정보가 들어 있다.


임의의 두 포인터 타입이 일치한다면, 기본적으로 포인터 연산에 증가 및 감소되는 크기가 일치해야 한다고 생각되어진다.


하지만
int a[3][2];
int b[2][3];


에서 보면 형(Type)은 일치하지만 연산 증가치가 달라 둘은 포인터 타입이 다르다.


이를 풀어 쓰면,
배열 이름 a는 int형이고 포인터 연산시 배열 요소를 2칸씩(2*4) 건너뛰는 포인터이고,
배열 이름 b는 int형이고 포인터 연산시 배열 요소를 3칸씩(3*4) 건너뛰는 포인터이다.

 

배열 이름의 포인터 타입.


int arr[2][4];
int (*pArr)[4]; //== int pArr[][4]; <-단 함수 매개변수 선언시에만 가능.


이 것은 포인터를 선언한 것이다.pArr이라는 이름의 포인터를 선언한 것이며, 포인터 앞에 있는 int와 뒤에 있는 [4]는 포인터의


타입(4칸씩 건너뛰는 포인터 타입)을 설명한 것이다. 이렇게 포인터가 배열을 가리킬 수 있다고 해서 배열 포인터라고 한다.

 

※ int (*pArr)[4]와 int* pArr[4]의 차이점

 

전자는 2차원 배열을 가리키는 포인터이고, 후자는 int형 변수의 주소 값 4개를 생성해서 저장할 수 있는 배열이다.