이차원 배열의 포인터에 대해서

hmd7932의 이미지

배열과 포인터를 공부한느 중 헷갈려서 질문 올립니다.

아래와 같은 이차원 배열이 있을 때

int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

printf("%d",arr+1);
printf("%d",*(arr+1));

위 결과가 동일하게 나오는 이유가 무엇인가요?

arr+1의 값이 주소값이면 *(arr+1)은 주소값이 가리키는 값이 가지는 값을 반환해서 5가 나와야 정상이 아닌지...

simminjo의 이미지

제 서버에선 다른값이 나오네요.

---------------------------------------------------------------
Opensource에 기여하는 것이 꿈입니다.
내가 만든 코드를 모두가 사용할 때 까지~

익명 사용자의 이미지

arr+1라는 수식의 결과겂은 pointer to array[4] of int 형 입니다.
여기에 참조연산자인 *( )를 두른다고 해 봤자,
array[4] of int형이 될 것이고,
여기에 배열의 암시적 형변환 규칙이 적용되면
pointer to int형이 될 겁니다.
결국 arr+1이나 *(arr+1)이나 똑같은 값을 가지는 포인터 주소값이 됩니다.

하지만 차이는 존재하는데,
arr + 1의 타입은 pointer to array[4] of int형인데 비해
*(arr + 1)의 타입은 pointer to int형입니다.

입문자에게는 상당히 까다로운 내용이므로
지금 이해 안간다고 좌절하지 마시길 바랍니다.