Array Pointer



1
2
3
4
int x[] = {1,2,3,4,5};

int (*p1)[5];
int *p2[5];


위 p1와 p2의 차이는?
  • p1은 int[5]의 pointer이고, 
  • p2는 int*를 item으로 가지는 길이 5의 array이다. 
위 두 line이 위와 같이 해석되는 이유는 c 컴파일러에서는 * 보다 []가 우선순위를 가지기 때문이다. 그러므로 p1이 포인터임을 명시하고 싶을 경우 우변에 []가 있다면 반드시 ()를 넣어 우선순위를 정해주어야 한다.
위 코드의 p1, p2는 다음과 같이 해석된다.
  • p1 is pointer of int[5] 
  • p2 is array[5] of int* 

1
2
3
4
5
int a1[3][2] = { { 1,2 },{ 3,4 },{ 5, 6 } };

int(*p1)[3][2] = &a1;
int *p2[3][2];
int (*p3)[2] = &a1[0];

위의 의미를 해석해 보면
  • p1 is pointer of int[3][2]; 
  • p2 is array[3][2] of int* 
  • p3 is pointer of int[2] 

이 내용을 이해했다면 다음의 두 값의 차이를 확실히 알 수 있을 것이다.
1
2
3
4
int x[] = {1,2,3,4,5};

int* p1 = x;
int (*p2)[5] = &x;

이 둘의 차이는 각각 1을 더했을 때 확인 할 수 있다.
  • p1은 sizeof(int) 만큼 증가하고, 
  • p2는 sizeof(int)*5 만큼 증가한다.

댓글

이 블로그의 인기 게시물

Raspberry pi 한글 설정 및 chromium 설치

Google Test를 이용한 Class의 Private/Protected Member Test