C++

C++ 포인터와 메모리 해제 (1)

윤주승 2025. 3. 18. 17:33

C++는 객체 지향 프로그래밍으로 배열의 크기를 실행 시간에 결정할 수 있다.

이는 배열의 크기를 동적으로 할당할 수 있다는 얘기이다.

기존 C언어에서는 malloc, calloc, realloc, free 함수 등을 사용해서 메모리를 동적으로 할당했지만,

C++에서는 new와 delete를 사용할 수 있다.

포인터는 사용할 주소에 이름을 붙인다. 

 간접값 연산자, 간접 참조 연산자 *를 사용할 수 있다.

int *a;		//C style
int* b;		//C++ style
int* c, d;	//c는 포인터 변수, d는 int형 변수
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    
    int a = 6;
    int* b;

    b = &a;

    cout << "a의 값 " << a << endl;
    cout << "*b의 값 " << *b << endl;

    cout << "a의 주소 " << &a << endl;
    cout << "*b의 주소" << b << endl;

    *b = *b + 1;

    cout << "이제 a의 값은 " << a <<endl;
    
    return 0;
}

일반 변수 a를 6으로 초기화하고, 포인터 변수 b를 선언했다.

먼저 a의 값을 출력하면 6이 나오고, *b의 값을 출력하면 a의 주소에 해당하는 값을 출력한다.

*b의 주소값은 a의 주소값을 가리키고 있기 때문에 a의 주소와 *b의 주소값은 같다.

포인터로 선언된 변수의 값을 확인할때는 간접참조연산자(*)를 붙여야하고, 주소를 확인할때는 기호를 붙이지 않는다.

일반적으로 포인터는 정수와는 다른 개념이기때문에 정수는 수 이지만, 포인터는 위치를 나타낸다.

변수의 주소를 대입함으로써 포인터를 이용해서 주소의 값을 변화를 주어 수정하는 것은 가능하다.