포인터 연산에 관해서 질문드립니다.


32비트 아키텍처에서 이 코드는 어떤 과정을 걸쳐서 출력되는 건가요?

소스코드

#include <stdio.h>

int main(void) {
    int x[4];
    printf("%p\n", (void*) (x));
    printf("%p\n", (void*) (x + 1));
    printf("%p\n", (void*) (&x));
    printf("%p\n", (void*) (&x + 1));
}
  • 2016년 01월 29일에 작성됨

조회수 176


1 답변


좋아요
0
싫어요
채택취소하기
printf("%p\n", (void*) (x));
printf("%p\n", (void*) (x + 1));
printf("%p\n", (void*) (&x));
printf("%p\n", (void*) (&x + 1));

에서 n = x의 첫 번째 원소의 주소라고 하면, 위의 코드는 각각

  1. n
  2. n + sizeof(int)
  3. n
  4. n + 4 * sizeof(int) 로 바꿀 수 있습니다.

1-3까지는 따로 설명할 필요는 없을 것 같고, 4에 대해서 설명하면

&xint(*)[4]타입이기 때문에 4 * sizeof(int)라고 할 수 있습니다.

  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close