개요

포인터에 대한 기초 정의와 선언, 사용에 대한 이야기

 


포인터

포인터 타입은 다른 객체나 함수의 메모리 주소값을 통해 가리킬 수 있는 타입니다.

이렇게 포인터를 통해 접근하는 것을 간접 참조(Indirect Reference)라고 한다.

 

포인터 사용법

포인터의 선언

포인터의 선언은 포인터가 가리킬 대상의 타입과 * 을 사용하여 선언할 수 있다.

선언한 포인터는 

 

포인터의 사용

포인터에는 가리키길 원하는 대상의 주소값을 대입할 수 있다.

*(포인터 식별자)를 사용하여 포인터가 가리키는 대상의 값을 역참조 할 수 있다.

 

포인터를 가리키는 포인터를 가리키는..

포인터는 포인터 타입을 가리키는 포인터를 만들 수 있다.

Pointer to Pointer to Pointer to Pointer to Pointer to Pointer to ... int 

 

 

포인터는 어떻게 사용될 수 있나

객체(Object)는 선언될 때 일정 범위의 수명을 가지고 있다.

A라는 블록에서 선언된 객체는 A 블록 내에서만 사용이 가능하지만,

B라는 블록에서 A블록의 객체에 접근이 필요한 경우도 있다.

이러한 경우, 포인터를 통하여 A블록의 객체의 주소값을 통해 접근할 수 있다.

A에서 선언된 number의 주소값을 B의 포인터 매개변수에 넣어줌으로써,

B에서 number의 값을 출력 가능하게 되었다.

 

void*

void 타입으로 정의하는 포인터는 데이터를 메모리 주소값 그 자체로 다룬다는 것을 의미한다.

때문에 void 타입의 포인터는 어떤 타입이든 포인터로 주소값을 받을 수 있지만,

자신이 어떤 타입인지 알 수 없기 때문에 역참조가 불가능하다.

 

주소 연산

포인터 타입은 주소값에 대한 연산(주소 연산)을 통해 주소 값의 증가와 감소가 이루어질 수 있다.

예를 들어 num[3] 이라는 int 타입의 배열이 있다고 가정하자.

배열은 첫번째 원소(num[0])의 주소값으로 저장되어, pointerToNum은 num[0]의 주소값을 갖게 된다.

이러한 포인터 타입의 pointerToNum에 증가/감소 연산이 이루어지면,

포인터가 가리키는 타입의 크기만큼 주소값의 이동이 이루어진다.

 

728x90

'Program > C (C++,C#)' 카테고리의 다른 글

[C] 열거형 ( Enumeration )  (0) 2022.05.29
[C] 문자열 ( String )  (0) 2022.05.29
[C] 입력과 출력 ( printf 만들기 )  (0) 2022.05.08
[C] 변환 ( Conversion )  (0) 2022.05.08
[C] 객체 ( Object )  (0) 2022.05.07

+ Recent posts