본문 바로가기

공부/C++

포인터 타입의 연산

일반적인 숫자의 덧셈은 +1 을 하면 1을 더한 값이 된다.

하지만 포인터 타입에서의 + 1은 1을 더한 값이 아니다.

예제를 보자.


#include <iostream>
using namespace std;


int main()
{
int array[10];// 배열 선언

int* p = &array[5]; // array[5] 의 주소값을 int형 포인터에 입력

cout << "p  = " << p << "\n"; // p값(array[5]의 주소값]을 출력
cout << "&array[5] = " << &array[5] << "\n"; // array[5]의 주소값을 출력

p++; // p = p + 1 과 같음.

cout << "p++\n";
cout << "연산 이후 변경된 값의 출력 \n";

cout << "p  = " << p << "\n"; // +1한 p값(??? 주소값]을 출력
cout << "&array[6] = " << &array[6] << "\n"; // array[6]의 주소값을 출력


system("pause");

return 0;

}
=================================== 
출력화면



===================================
//////////////////////

이렇게 포인터인 p값에 +1 을 할 경우 실제로는 +4가 연산되어 다음 주소를 가리키게 된다. 

이는 int타입이 4바이트씩 구성되기 때문이며 타입을 바꾸면 그 타입의 크기만큼씩 변경됨을 알 수 있다.

/////////////////
 
 
포인터 변수간의 뺄셈도 가능하다. 이 경우에는 두 포인터 변수간의 주소 차이 가 아닌 몇개의 원소가 있는지를 반환한다.

//////////////


 #include <iostream>
using namespace std;


int main()
{
short sArrays[10];
short* ps1 = &sArrays[3];
short* ps2 = &sArrays[7];

cout << "ps1   = " << ps1 << "\n"; // 
cout << "ps2   = " << ps2 << "\n"; // 
cout << "ps2 - ps1 = " << ps2 - ps1 << "\n"; // 차를 출력.


system("pause");

return 0;

}
==========================================
출력화면
 


=============================================

주소값이 출력된 차를 보면 8 이지만[short타입은 2바이트씩 차지한다.] 실제로 그 사이의 원소 차는 4이기 때문에 4가 출력되는 것이다.