Skip to content

Latest commit

 

History

History
91 lines (68 loc) · 3.89 KB

PointerOperator.md

File metadata and controls

91 lines (68 loc) · 3.89 KB

포인터 변수 관련 연산

포인터 변수에 적용되는 대표적인 연산자로는 다음과 같이 주소 연산자(&), 역참조 연산자(*), 증감 연산자(++/--) 이다.

연산자 의미 피연산자 (연산자를 적용가능한 변수)
& :변수에 할당된 메모리의 주소를 얻는 연산자 (주소연산자) 일반 변수 및 포인터 변수
* 메모리 주소 값에 저장된 데이터 값을 얻는 연산자 (간접 참조 연산자, 역참조 연산자) 포인터 변수
++ 전위/후위 증가 연산자 일반 변수 및 포인터 변수
-- 전위/휘의 감소 연산자 일반 변수 및 포인터 변수
#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
	int a = 10, b = 20;
	int *ptr;

	ptr = &a;
	cout << "포인터 변수(ptr)가 가리키는 주소(&a)에 저장된 값: " << *ptr << endl;
	ptr = &b;
	cout << "포인터 변수(ptr)가 가리키는 주소(&b)에 저장된 값: " << *ptr << endl;

	return 0;
}

다음 프로그램은 일반 변수 a와 b 두 개와 포인터 변수 ptr 한 개를 선언하고 포인터 변수 ptr을 통해 일반 변수 a, b의 메모리 저장공간의 주소를 저장한 후 역참조 연산자를 통해서 메모리에 저장된 값을 참조하여 화면에 출력하고 있다.

프로르갬 실행 결과는 다음과 같다.

포인터 변수(ptr)가 가리키는 주소(&a)에 저장된 값: 10
포인터 변수(ptr)가 가리키는 주소(&b)에 저장된 값: 20
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr++;

앞의 프로그램 예에서 ptr++ 는 ptr에 저장된 주소를 증가시키는 연산으로 주소 값이 1 증가되는 것이 아니라 포인터 변수가 가리키는 데이터의 자료형에 따라 다음 데이터를 가리키는 주소 값을 저장하도록 한다. 앞의 코드에서 ptr는 int형으로 ptr++ 는 ptr에 저장된 주소 값에 4가 더해진다.

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
	int arr[5] = {10, 20, 30, 40, 50};
	int *ptr = arr;

	cout << "배열 arr의 첫 번째 원소의 값(*ptr): " << *ptr << endl;
	ptr++;	// 포인터 변수 값(주소 값) 증가
	cout << "배열 arr의 두 번째 원소의 값(*ptr): " << *ptr << endl;
	(*ptr)++; // 포인터 변수에 저장된 값의 증가 
	cout << "배열 arr의 두 번째 원소의 값(*ptr): " << *ptr << endl;
	// 포인터 변수에 저장된 값 증가를 한 후 역참조 연산자로 메모리에 저장된 값 참조 출력 
	cout << "배열 arr의 세 번째 원소의 값(*ptr): " << *++ptr << endl;
	// 세 번째 원소의 값 참조한 후 포언터 변수에 저장된 값 증가 (다음 원소의 주소 저장)
	cout << "배열 arr의 세 번째 원소의 값(*ptr): " << *ptr++ << endl; 
	cout << "배열 arr의 네 번째 원소의 값(*ptr): " << *ptr << endl;

	return 0;
}

앞의 프로그램 코드는 배열의 원소를 포인터 변수를 통해 접근하는 것이다. int *ptr = arr은 배열 변수를 위해 할당된 메모리의 시작 주소(arr에 저장된 값)를 포인터 변수 ptr에 저장한다. 그 후 ptr++는 배열의 두 번쨰 원소가 저장된 주소 값으로 증가한다. (*ptr)++은 ptr에 저장된 주소에 저장된 데이터 값을 1 증가시킨다. *ptr++은 ptr의 주소에 저장된 데이터 값을 참조(*ptr)한 후 ptr의 주소 값을 증가시킨다. *++ptr은 ptr의 주소 값을 증가시킨 후 주소에 저장된 값을 참조한다.

배열 arr의 첫 번째 원소의 값(*ptr): 10
배열 arr의 두 번째 원소의 값(*ptr): 20
배열 arr의 두 번째 원소의 값(*ptr): 21
배열 arr의 세 번째 원소의 값(*ptr): 30
배열 arr의 세 번째 원소의 값(*ptr): 30
배열 arr의 네 번째 원소의 값(*ptr): 40