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

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));
}

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)라고 할 수 있습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.