IT 프로그래밍/C++

C++ [포인터 개념 정리]

기술1 2024. 3. 26. 22:12
반응형

포인터는 주소를 저장하는 변수입니다. 

int main()
{
	int x = 5;

	int* ptr_x = &x;

	return 0;
}

이런식으로 사용하면 되는데요. ptr_x는 x의 주소값을 저장해주는 포인터 변수입니다. 

 

int main()
{
	int x = 5;
	double d = 123.0;

	int* ptr_x;
	double* ptr_d;

	cout << sizeof(x) << endl;
	cout << sizeof(d) << endl;
	cout << sizeof(&x) << " " << sizeof(ptr_x) << endl;
	cout << sizeof(&d) << " " << sizeof(ptr_d) << endl;

	return 0;
}

이거 같은 경우 주소는 4라고 나옵니다. 반면 64비트를 쓸 경우 주소의 size는 8로 나옵니다. 이는 주소의 자체를 4byte, 8byte로 쓰기 때문입니다. 

 

프로그램에 쓰레기 값이 들어가 있는 변수에 *ptr을 걸어줄 경우 오류가 발생합니다. 쓰레기 주소값의 경우 dereferencing의 경우 문제가 생길 수 있으므로 NULL point의 개념에 대해 아셔야 합니다. 

 

#include <iostream>
#include <cstddef>
using namespace std;

void doSomething(double* ptr)
{
	if (ptr != nullptr)
	{
		cout << *ptr << endl;
	}
	else
	{
		cout << "Null ptr, do nothing " << endl;
	}
}
int main()
{
	double* ptr{ nullptr };

	doSomething(ptr);
	doSomething(nullptr);

	double d = 123.4;

	doSomething(&d);

	ptr = &d;

	doSomething(ptr);

	nullptr_t nptr;

	return 0;
}

 doSomething 함수부터 설명하자면 doSomething 함수는 double 형식의 포인터를 매개변수로 받습니다. 이 함수는 주어진 포인터가 가리키는 값이 nullptr가 아니면 해당 값을 출력하고 그렇지 않으면 Null ptr, do nothing 메세지를 출력합니다. 

 

nullptr은 포인터가 아무 것도 가리키지 않음을 나타내는데 사용되는 것입니다. 자료형이 없는 null 포인터를 말하며 어떤 자료형의 포인터든 nullptr로 초기화할 수 있습니다. 이는 타입 안정성을 제공하고 혼동을 방지하며 보다 명확한 코드로 작성할 수 있도록 도와줍니다. 

 

nullptr은 유효성 검사에도 사용할 수 있으며 메모리 오류를 방지할 수 있습니다. 

 

반응형