카테고리 없음

배열 포인터 (2차원 배열과 포인터)

zuyo 2019. 5. 8. 22:12
반응형

int arr[3][3] 이란 2차원배열이 있다고 하자.

printf("%p",arr);
printf("%p",arr[0]);
은 동일한 결과값을 출력한다.

그러나 arr 과 arr[0] 은 서로 다른 것이다. 
arr 의 사이즈를 출력하면 배열 전체의 사이즈가 나오고
arr[0] 의 경우 한 행의 사이즈가 나온다.


2차원 배열의 증감연산

int arr1[3][2];
int arr2[2][3];

arr1, arrr1+1, arr1+2 는 8씩 증가한다 (4바이트 x 2열)
arr2, arr2+1 은 12씩 증가한다 (4바이트 x 3열)

즉 이중배열의 증감연산의 공식은 ( 자료형의크기 x 열의 수 ) 이다.

그리고 연산결과는 각 행의 첫번째 요소의 주소값이다.

예를 들면 arr1+1 은 arr1[1][0] 의 주소값을 나타낸다.


2차원 배열과 포인터 변수의 관계

int형 변수이면서 (4 x 4) 의 단위로 증감연산되는(4칸씩 건너뛰는) 2차원 배열은 아래와 같다.
int arr[][4]; 

포인터 변수로 표현하면 아래와 같다.
int (*arr) [4]; 

그 외
char (*arr1)[4]; // char형 변수를 가리키면서 포인터연산시 ( 1 x 4 ) 단위로 증감연산
double (*arr2)[7]; // double형 변수를 가리키면서 포인터연산시 ( 8 x 7 ) 단위로 증감연산


'배열 포인터'와 '포인터 배열'의 구분

포인터 배열은 말 그대로 포인터 변수들로 이루어진 배열이다.
int* arr1[4];

배열 포인터는 배열을 가리키는 용도의 포인터 변수를 의미한다.
int (*arr2)[4];


2차원배열 을 함수의 인자로 받는 방법

이렇게 Func의 인자로 arr을 받기 위해서는 
int arr[2][7];
Func(arr);

인자를 이런 식으로 선언해야 한다.
void Func( int (*parr)[7] ); 
void Func( int parr[][7] );

반응형