포인터는 다른 변수의 메모리 주소를 저장하는 특별한 변수이다. 즉, 데이터를 직접 저장하는 대신 그 데이터가 메모리상에 저장된 위치(주소)를 저장한다. 포인터는 주로 메모리 관리와 관련된 작업에 사용되며, 특히 C, C++와 같은 언어에서 매우 중요한 개념이다.
포인터 선언
포인터 선언은 해당 포인터가 가리키는 변수의 데이터 타입과 변수명 사이에 *를 붙여서 선언한다.
int a = 10;
int *p = &a; //p는 a의 주소를 저장하는 포인터
위 코드에서 int *p는 p가 int형 데이터를 가리키는 포인터임을 나타낸다. &a는 변수 a의 주소를 반환하며, p는 그 주소를 저장한다.
주소 연산자 &와 간접 참조 연산자 *
주소 연산자 &: 변수의 메모리 주소를 얻는 데 사용된다.
간접 참조 연산자 *: 포인터가 가리키는 메모리 주소에서 실제 값을 참조하거나 수정하는 데 사용된다.
간접 참조 연산자 *의 두 가지 용도
1. 포인터 선언에서 사용되는 *(선언문에서 사용되는 *)
포인터는 변수의 주소를 저장하는 변수이므로, 포인터를 선언할 때 *를 사용하여 변수 타입을 지정한다. *는 해당 변수가 포인터임을 나타낸다.
int *p; // p는 int형 데이터를 가리키는 포인터
이 선언은 p가 int형 변수의 주소를 저장하는 포인터임을 나타낸다. 즉, *는 선언문에서 포인터 라는 것을 명시하는 역할을 한다.
2. 간접 참조에서 사용되는 *(실행문에서 사용되는 *)
*는 간접 참조 연산자로도 사용된다. 이는 포인터가 가리키는 메모리 주소에서 실제 데이터를 참조하거나 수정하는 데 사용된다. 포인터가 저장한 주소를 통해 간접적으로 그 주소에 있는 값을 다룰 수 있다.
#include <stdio.h>
int main() {
int a = 10;
int *p = &a; //p는 a의 주소를 저장하는 포인터
printf("a = %d\n", *p); //*p는 a의 값을 출력(간접 참조)
*p = 20; //*p를 통해 a의 값을 변경
printf("a = %d\n", *p); //이제 a의 값은 20
return 0;
}
위 코드에서 *p는 p가 가리키는 주소에 있는 값인 a의 값을 참조한다. *p = 20;을 통해 p가 가리키는 주소에 저장된 값을 변경하여 a의 값도 20으로 바뀌게 된다.
예시 코드
#include <iostream>
int main()
{
int x = 1;
int* px = &x;
//px는 x의 주소를 저장하는 정수형 포인터이다. &x는 x의 메모리 주소를 반환한다.
std::cout << x << ", " << px << ", " << *px;
//x: 변수 x의 값 (1)
//px: 포인터 px가 가리키는 메모리 주소
//*px: px가 가리키는 주소의 값 (x의 값, 즉 1)
return 0;
}
'Language > C | C++' 카테고리의 다른 글
[C | C++]생성자 오버로딩과 디폴트 인자 (0) | 2024.11.15 |
---|---|
[C | C++]배열과 포인터의 관계 (0) | 2024.11.13 |