이차원 배열의 포인터에 대해서
글쓴이: hmd7932 / 작성시간: 월, 2013/07/22 - 12:00오전
배열과 포인터를 공부한느 중 헷갈려서 질문 올립니다.
아래와 같은 이차원 배열이 있을 때
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가 나와야 정상이 아닌지...
Forums:
음
제 서버에선 다른값이 나오네요.
---------------------------------------------------------------
Opensource에 기여하는 것이 꿈입니다.
내가 만든 코드를 모두가 사용할 때 까지~
arr+1라는 수식의 결과겂은 pointer to
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형입니다.
입문자에게는 상당히 까다로운 내용이므로
지금 이해 안간다고 좌절하지 마시길 바랍니다.
댓글 달기