라벨이 pointer인 게시물 표시

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 만큼 증가한다.