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

조회수 2204회

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)