728x90
8. 포인터
포인터란?
포인터(pointer)는 메모리 주소를 저장하는 변수입니다. 즉, 특정 변수의 메모리 주소를 가리키며, 이를 통해 해당 변수의 값을 간접적으로 접근하고 수정할 수 있습니다.
기본 개념
// 포인터 변수 선언 및 초기화
int* pint = nullptr; // nullptr은 0x00000000을 의미하며, 포인터가 아무것도 가리키지 않음을 나타냄
int i = 100;
// & : 변수의 주소값을 가져오는 연산자
int* pint2 = &i; // i의 주소를 pint2에 저장
// 주소를 이용한 값 변경
(*pint2) = 200; // pint2가 가리키는 변수 i의 값을 200으로 변경
// 다른 데이터 타입의 포인터
float f = 3.14f;
float* pf = &f; // f의 주소를 pf에 저장
주소의 단위는 바이트(Byte)
C++에서 메모리 주소는 16진수(HEX)로 표현됩니다. 주소 앞의 0x는 해당 숫자가 16진수임을 나타냅니다.
데이터 타입에 따른 포인터 정리
데이터 타입 | 포인터 타입 | 설명 |
int | int* | 정수형 포인터 |
float | float* | 실수형 포인터 |
double | double* | 배정밀도 실수형 포인터 |
char | char* | 문자형 포인터 (C 스타일 문자열 처리 가능) |
bool | bool* | 불리언형 포인터 |
void | void* | 타입이 지정되지 않은 포인터 (범용 포인터) |
int[] | int* | 정수형 배열 포인터 (배열의 첫 번째 요소 주소) |
float[] | float* | 실수형 배열 포인터 |
double[] | double* | 배정밀도 실수형 배열 포인터 |
char[] | char* | 문자형 배열 포인터 (C 스타일 문자열) |
struct MyStruct | MyStruct* | 구조체 포인터 |
class MyClass | MyClass* | 클래스 객체 포인터 |
int** | int** | 이중 포인터 (포인터를 가리키는 포인터) |
int*& | int*& | 포인터에 대한 참조 (포인터 자체를 변경 가능) |
int* const | int* const | 상수 포인터 (포인터 주소 변경 불가) |
const int* | const int* | 상수 데이터를 가리키는 포인터 (값 변경 불가) |
const int* const | const int* const | 상수 데이터를 가리키는 상수 포인터 (값 및 주소 변경 불가) |
std::unique_ptr<int> | std::unique_ptr<int> | C++ 스마트 포인터 (유일한 소유권) |
std::shared_ptr<int> | std::shared_ptr<int> | C++ 스마트 포인터 (공유 소유권) |
std::weak_ptr<int> | std::weak_ptr<int> | C++ 스마트 포인터 (약한 참조) |
포인터 예제 코드
✅ 코드 설명
- int, double, char 타입의 변수를 선언합니다.
- 각 변수의 주소를 포인터에 저장하여 출력합니다.
#include <iostream>
int main() {
int a = 10;
double b = 3.14;
char c = 'X';
int* ptrA = &a;
double* ptrB = &b;
char* ptrC = &c;
std::cout << "변수 a의 값: " << a << ", 주소: " << ptrA << std::endl;
std::cout << "변수 b의 값: " << b << ", 주소: " << ptrB << std::endl;
std::cout << "변수 c의 값: " << c << ", 주소: " << static_cast<void*>(ptrC) << std::endl;
return 0;
}
🔹 실행 결과 (예시)
※ 주소 값은 실행할 때마다 달라질 수 있음
변수 a의 값: 10, 주소: 0x7ffee9b2a9fc
변수 b의 값: 3.14, 주소: 0x7ffee9b2a9f8
변수 c의 값: X, 주소: 0x7ffee9b2a9f7
✅ 주요 개념 정리
- &변수 → 변수의 주소를 가져옴
- int*, double*, char* → 해당 타입의 포인터 선언
- static_cast<void*>(ptrC) → char*는 std::cout에서 문자열로 해석될 수 있어 void*로 변환 후 출력
'C++ > 유튜브 어소트락 게임아카데미 C++무료강의' 카테고리의 다른 글
7. 지역변수, 전역변수 (0) | 2025.04.02 |
---|---|
6. 구조체(Structure) (0) | 2025.03.30 |
5. 배열 (0) | 2025.03.26 |
4 함수 (0) | 2025.03.26 |
3. 연산자 및 전처리 구문 (0) | 2025.03.24 |