반응형
int
int a[] = {1, 2, 3, 4, 5};
int *p = &a[2];
cout << p - 2 << endl;
cout << p - 1 << endl;
cout << p << endl;
cout << p + 1 << endl;
cout << p + 2 << endl;
----------------------
output
0x7ffeefbff400
0x7ffeefbff404
0x7ffeefbff408
0x7ffeefbff40c
0x7ffeefbff410
간격이 4임을 알 수 있음. (포인터 변수가 가리키고 있는 원소가 int형, 즉 4바이트이기 때문에. 포인터 크기랑은 상관없다.)
short
short a[] = {1, 2, 3, 4, 5};
short *p = &a[2];
cout << p - 2 << endl;
cout << p - 1 << endl;
cout << p << endl;
cout << p + 1 << endl;
cout << p + 2 << endl;
----------------------
output
0x7ffeefbff40e
0x7ffeefbff410
0x7ffeefbff412
0x7ffeefbff414
0x7ffeefbff416
간격이 2임을 알 수 있음. (포인터 변수가 가리키고 있는 원소가 short형, 즉 2바이트이기 때문에. 포인터 크기랑은 상관없다.)
이러한 이유로
short a[] = {1, 2, 3, 4, 5};
short *p1 = &a[1];
short *p2 = &a[4];
cout << p2 - p1 << endl;
------------------------
output
3
산술적으로 보았을 때에는 6이 되어야 하겠지만, 결과는 3이 된다. 포인터 연산이기 때문에.
반응형
'[C++]' 카테고리의 다른 글
[C++] 포인터 배열 (0) | 2021.06.22 |
---|---|
[C++] 배열 포인터 (0) | 2021.06.22 |
[C++] 2진수, 8진수, 10진수, 16진수 표현 (0) | 2021.06.22 |
[C++] 구조체 (0) | 2021.06.22 |
[C++] Range based for문 (0) | 2021.06.22 |