본문 바로가기
[C++]

[C++] 포인터 연산

by Hevton 2021. 6. 22.
반응형

 

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