친구의 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,,, 포인터에 대한 공부가 부족한 것 같다 해도해도 끝이없네~
알고리즘 공부도 좋지만 포인터에 대한 공부도 다시금 해보는 좋은 시간이었다
'공부' 카테고리의 다른 글
| 게임서버 프로그래밍 #2 (소켓 프로그래밍) (0) | 2022.07.06 |
|---|---|
| 게임서버 프로그래밍 #1 (네트워크의 기초) (0) | 2022.07.05 |