본문 바로가기
C++/유튜브 어소트락 게임아카데미 C++무료강의

8. 포인터

by GREEN나무 2025. 4. 3.
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++ 스마트 포인터 (약한 참조)

 

포인터 예제 코드

✅ 코드 설명

  1. int, double, char 타입의 변수를 선언합니다.
  2. 각 변수의 주소를 포인터에 저장하여 출력합니다.
#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

✅ 주요 개념 정리

  1. &변수 → 변수의 주소를 가져옴
  2. int*, double*, char* → 해당 타입의 포인터 선언
  3. 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