2차원 포인터에 대해서...

thslrtoo의 이미지

#include <stdio.h>
 
int main(void)
{
    int imsi[3][2] = {{3, 5}, {12, 54}, {534, 923}};
    int (*imsip)[2];
 
    printf("%d\n", sizeof(imsip+1));
    printf("%d\n", sizeof(*(imsip+1)));
}

위와 같은 코드가 있슷비니다.
결과 값으로는

=== output ===
4
8

이 나와야 한다고 합니다.
gcc로 컴파일해서 확인해본 결과(책에서도 gcc로 컴파일 합니다.) 아래와 같이 나왔습니다.

=== output ===
8
8

VS2008 로 컴파일 해보니 책과 같은 결과를 받았는데
어떤게 맏는건지요??
그리고 왜 이런 결과가 나온건가요??

익명 사용자의 이미지

첫번째 줄

imsip의 타입은 pointer to array[2] of int
여기에 +1을 더해도 여전히 그 타입은 pointer to array[2] of int 입니다.

두번째 줄

여기에 참조 연산자를 붙이면
array[2] of int 네요.

첫번째 줄의 크기는 pointer 타입과 같고
두번째 줄의 크기는 sizeof(int) * 2와 같네요.

pointer의 크기는 64비트이고 int의 크기는 32비트인 환경이라 생각하면
대충 맞아 떨어지네요.