글
■ 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 |
RECENT COMMENT