포인터(pointer)는 다른 변수의 메모리 주소를 저장하는 특수한 변수입니다. C/C++에서 포인터 변수를 선언하려면 변수 이름 앞에 별표(*, asterisk)를 붙이면 됩니다.
선언 문법
*pointer_name
포인터 선언 시 사용되는 핵심 연산자는 두 가지입니다.
&(주소 연산자): 변수의 메모리 주소를 얻습니다.*(역참조 연산자, 역참조): 포인터가 가리키는 주소에 저장된 값에 접근합니다.
C 언어에서의 포인터 선언
다음 예제는 정수형 변수 a의 주소를 포인터 p에 저장하고, 이를 활용해 값을 읽고 수정하는 과정을 보여줍니다.
예제 코드
#include <stdio.h>
int main() {
// 일반 정수형 변수
int a = 7;
// 변수 a의 주소를 저장하는 포인터 변수
int *p = &a;
// 포인터를 통해 변수 a의 값 출력
printf("Value of Variable : %d\n", *p);
// 변수 a의 메모리 주소 출력
printf("Address of Variable : %p\n", p);
// 포인터를 통해 값 재할당
*p = 6;
printf("Value of the variable is now: %d\n", *p);
return 0;
}실행 결과
Value of Variable : 7 Address of Variable : 0x6ffe34 Value of the variable is now: 6
C++에서의 포인터 선언
C++에서도 포인터 선언 방식은 C와 동일합니다. 단, 입출력에는 iostream 헤더와 cout 객체를 사용합니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
// 일반 정수형 변수
int a = 7;
// 변수 a의 주소를 저장하는 포인터 변수
int *p = &a;
// 포인터를 통해 변수 a의 값 출력
cout<<"Value of Variable : "<<*p<<endl;
// 변수 a의 메모리 주소 출력
cout<<"Address of Variable : "<<p<<endl;
// 포인터를 통해 값 재할당
*p = 6;
cout<<"Value of the variable is now: "<<*p<<endl;
return 0;
}실행 결과
Value of Variable : 7 Address of Variable : 0x6ffe34 Value of the variable is now: 6
핵심 정리
- 포인터 선언: 자료형 뒤에 별표를 붙여
int *p;형태로 작성합니다. - 초기화:
&연산자로 변수의 주소를 가져와 할당합니다(예:p = &a;). - 값 접근 및 수정:
*p처럼 역참조하면 해당 주소의 실제 값에 접근할 수 있으며, 이를 통해 원본 변수의 값도 변경됩니다.
포인터는 C/C++ 프로그래밍의 핵심 개념으로, 동적 메모리 할당, 배열 처리, 함수 간 데이터 전달 등 다양한 상황에서 활용됩니다. 위 예제처럼 주소와 역참조의 동작 원리를 정확히 이해하는 것이 중요합니다.