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이라는 결과가 나온 것입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)