■ 1차원 배열의 포인터는 해당 배열의 주소값만 있으면 된다. 하지만 2차원 배열의 포인터는 배열의 크기에 대한 정보가 필요하다.


(1) 2차원 배열의 포인터

(배열의 형) ( *(포인터 이름) )[2차원 배열의 열 개수];

- (배열의 형)을 통해서 원소의 크기에 대한 정보를 알 수 있다.
- [2차원 배열의 열 개수] 를 통해 1 증가시 커지는 크기도 알 수 있다.


(2) Example

int (*parr)[3];
: int형 이차원 배열을 가리키는데, 그 배열의 열의 개수가 3개이다. 다시말해 int* 를 가리키는데, 1 증가시 3이 커진다는 의미)

#include <stdio.h>
int main()
{
    int arr[2][3]={{1,2,3},{4,5,6}};
    int brr[10][3];
    int crr[2][5];

    int (*parr)[3];

    parr = arr; // O.K
    parr = brr; // O.K
    parr = crr; // 오류!!!!

    return 0;
}

1. parr[1][2] == arr[1][2] == 6 이다.
2. arr의 값은 배열 1의 주소값, arr+1의 값은 4의 주소값을 가진다. 아래 차이점을 살펴보자.


(3) 1차원배열과 2차원배열의 차이점

int a[3]={1,2,3}
int b[2][3]={1,2,3},{4,5,6}

- 1차원 배열의 경우 a는 a[0]을 가리킨다. 그리고 a+1을 하면 a[1]을 가리킨다.

- 2차원 배열의 경우 b는 b[0][0]을 가리킨다. 그리고 b+1을 하면 1차원과 마찬가지로 b[1]을 가리킨다.
   하지만 2차원 배열의 b[1]은 1차원 배열의 것과 다르다.

b[0][0] = 1
b[0][1] = 2
b[0][2] = 3
b[1][0] = 4
b[1][1] = 5
b[1][2] = 6

따라서 b + 1 은 4의 주소값을 가지게 된다.


'P rogramming > C Language' 카테고리의 다른 글

포인터 이론  (0) 2011.10.26
2차원 배열의 연산  (0) 2011.10.25
배열과 포인터의 관계  (0) 2011.10.25
포인터의 const  (0) 2011.10.24
ASCII(아스키) 코드표  (0) 2011.10.21
by 민트앤라떼 2011. 10. 25. 15:16