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의 주소값은 같다.
포인터로 선언된 변수의 값을 확인할때는 간접참조연산자(*)를 붙여야하고, 주소를 확인할때는 기호를 붙이지 않는다.
일반적으로 포인터는 정수와는 다른 개념이기때문에 정수는 수 이지만, 포인터는 위치를 나타낸다.
변수의 주소를 대입함으로써 포인터를 이용해서 주소의 값을 변화를 주어 수정하는 것은 가능하다.