본문 바로가기
Jaden's spectrum/📂 Programming Languages

[c++] 11. 더블 포인터 & 포인터의 메모리

by JadenWe 2025. 3. 20.
반응형

C++ 포인터의 포인터와 포인터의 메모리 크기

C++에서 포인터(pointer)는 변수의 메모리 주소를 저장하는 변수입니다. 하지만 포인터 자체도 메모리 주소를 가지므로, 포인터의 포인터를 사용하여 다단계 접근이 가능합니다. 또한, 포인터는 자료형과 관계없이 일정한 메모리 크기를 차지하는 특징이 있습니다.

1. 포인터의 포인터 (Double Pointer)

포인터의 포인터는 포인터 변수를 가리키는 포인터입니다. 즉, 일반적인 포인터가 변수의 주소를 저장하는 것과 달리, 포인터의 포인터는 다른 포인터의 주소를 저장합니다.

포인터의 포인터 선언

int a = 10;     // 정수 변수
int* p = &a;    // 'a'의 주소를 저장하는 포인터
int** pp = &p;  // 'p'의 주소를 저장하는 포인터의 포인터

위 코드에서:

  • pa의 주소를 저장하는 포인터
  • ppp의 주소를 저장하는 이중 포인터입니다.

포인터의 포인터 예제

#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int* p = &num;
    int** pp = &p;

    cout << "num의 값: " << num << endl;
    cout << "p를 통한 num의 값: " << *p << endl;
    cout << "pp를 통한 num의 값: " << **pp << endl;

    return 0;
}
num의 값: 10
p를 통한 num의 값: 10
pp를 통한 num의 값: 10

설명:

  • *pnum의 값을 참조
  • **ppp를 참조하여 다시 num의 값을 참조

이중 포인터를 활용하면 포인터 변수를 동적으로 할당하거나 함수에서 포인터를 변경할 때 유용합니다.

 

2. 포인터의 메모리 크기

C++에서 포인터의 크기는 포인터가 가리키는 데이터의 크기와 관계없이 일정합니다. 이는 포인터가 메모리 주소를 저장하는 변수이기 때문입니다.

포인터의 크기 확인 예제

#include <iostream>
using namespace std;

int main() {
    int* pInt;
    double* pDouble;
    char* pChar;

    cout << "int* 크기: " << sizeof(pInt) << " 바이트" << endl;
    cout << "double* 크기: " << sizeof(pDouble) << " 바이트" << endl;
    cout << "char* 크기: " << sizeof(pChar) << " 바이트" << endl;

    return 0;
}
int* 크기: 8 바이트
double* 크기: 8 바이트
char* 크기: 8 바이트

설명:

  • 64비트 시스템에서는 모든 포인터가 8바이트 크기를 가짐
  • 32비트 시스템에서는 모든 포인터가 4바이트 크기를 가짐
  • 포인터의 크기는 가리키는 데이터의 자료형과 무관하며, 시스템 아키텍처(32비트/64비트)에 따라 달라짐
 

3. 포인터 크기와 동적 메모리 할당

포인터의 크기는 항상 일정하지만, 포인터가 가리키는 데이터의 크기는 자료형에 따라 다릅니다.

#include <iostream>
using namespace std;

int main() {
    int* p = new int;     // 정수형 포인터
    double* dp = new double; // 더블형 포인터

    cout << "int 크기: " << sizeof(*p) << " 바이트" << endl;
    cout << "double 크기: " << sizeof(*dp) << " 바이트" << endl;

    delete p;
    delete dp;

    return 0;
}
int 크기: 4 바이트
double 크기: 8 바이트

설명:

  • sizeof(p)는 포인터 자체의 크기를 반환 (8바이트, 64비트 기준)
  • sizeof(*p)는 포인터가 가리키는 값의 크기를 반환 (4바이트, int 기준)
  • sizeof(*dp)는 8바이트 (double 기준)

 

1. 포인터의 포인터는 다른 포인터의 주소를 저장하는 포인터로, 다단계 접근이 가능하며 포인터의 값을 변경할 때 유용합니다.

2. 포인터의 크기는 자료형과 관계없이 일정하며, 32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트입니다.

3. 포인터가 가리키는 데이터의 크기는 자료형에 따라 달라지므로, 이를 잘 이해하고 사용해야 합니다.

 

 

 

[c++] 10. callByValue & callByReference

1. Call by Value (값에 의한 호출)Call by Value 방식에서는 함수에 전달된 인자의 복사본이 생성되어 함수 내부에서 사용됩니다. 따라서 원본 값에는 영향을 주지 않습니다.Call by Value 예제#include using na

clarelee.tistory.com

반응형