공부

간단한 C 포인터 문제

한영인 2022. 6. 11. 16:58

친구의 C++ 시험공부를 도와주다 이런 문제를 보았다.

#include <iostream>

using namespace std;

int main() {

	short arr[5];
    short*p = &arr[3];
    short*q = &arr[0];
    int r = p - q;
    
    cout << r << endl;
}

이때 r의 값을 구하는 문제인데, short는 2byte라고 가정한다.

 

short가 2byte로 arr은 총 10byte를 사용하고 있고,

p와 q는 6byte만큼 차이가 나기 때문에 r은 6이라고 예상하였다.

 

하지만 직접 VS로 찍어보니 결과는 달랐다

p-q의 결과는 3이 나오는 것이다.

최근에 C관련 공부를 너무 안했나,, 10 - 4가 왜 6이아니라 3이 나올까.. 라고 생각했는데 내 생각이 틀렸다

내가 생각한 것은 번지수끼리의 계산이기 때문에 6이 나오는 것이지만, p-q는 컴파일러가 포인터끼리의 연산으로 보기 때문에 p-q는 둘 사이의 거리를 나타내는 것이고 이는 3을 나타낸다..가 정답인 것으로 추측된다

따라서 정답은 3,,, 포인터에 대한 공부가 부족한 것 같다 해도해도 끝이없네~

알고리즘 공부도 좋지만 포인터에 대한 공부도 다시금 해보는 좋은 시간이었다