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, 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 만큼 증가한다.
댓글
댓글 쓰기