포인터 연산에 관해서 질문드립니다.
조회수 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 답변
-
printf("%p\n", (void*) (x)); printf("%p\n", (void*) (x + 1)); printf("%p\n", (void*) (&x)); printf("%p\n", (void*) (&x + 1));
에서 n = x의 첫 번째 원소의 주소라고 하면, 위의 코드는 각각
n
n + sizeof(int)
n
n + 4 * sizeof(int)
로 바꿀 수 있습니다.
1-3까지는 따로 설명할 필요는 없을 것 같고, 4에 대해서 설명하면
&x
은int(*)[4]
타입이기 때문에4 * sizeof(int)
라고 할 수 있습니다.
댓글 입력