C언어 포인터와 배열관련 문의
조회수 741회
안녕하세요.
C언어에서 포인터와 배열관련해서 궁금한점이 있는데요.
다음 코드와 같이 p-myarr을 수행하면 왜 1과 같은 숫자가 보이게되는건가요?
출력된 주소값을 기반으로 계산해보면 0x7ffc279f5054 - 0x7ffc279f5050 = 4가 나와야 하는데 왜 1이 나오는건지 궁금합니다.
코드
#include <stdio.h>
int main(void) {
int myarr[10] = {1,2,3};
int *p = myarr;
printf("arr memory : %p\n", &myarr);
printf("pointer memory : %p\n", p);
for(int i =0; i<3; i++){
p++;
printf("pointer up address : %p\n", p);
printf("pointer : %d\n", p-myarr);
}
}
출력
arr memory : 0x7ffc279f5050
pointer memory : 0x7ffc279f5050
pointer up address : 0x7ffc279f5054
pointer : 1
pointer up address : 0x7ffc279f5058
pointer : 2
pointer up address : 0x7ffc279f505c
pointer : 3
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
포인터의 연산은 자료형의 메모리상의 크기에 기반합니다.
질문해주신 예제에서 보면 p++ 했을 때,
0x7ffc279f505*0* -> 0x7ffc279f505*1*로 바뀐게 아니라
0x7ffc279f505*0* -> 0x7ffc279f505*4*로 바뀐 것을 확인 할 수 있습니다.
++ 연산자는 1증가 시킨 것인데 메모리 주소는 4가 증가했습니다.
즉, 질문자의 컴퓨터에서 int 자료형 1개는 4byte의 메모리를 차지하는 것을 알 수 있습니다.
이와 마찬가지로 뺄샘 연산에서도 동일한 원칙이 적용되어, 4byte가 차이 나지만 byte가 int형 자료형 1개의 공간이때문에 1이라는 결과가 나온 것입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력