본문 바로가기
IT/C++

C++ Pointers 정리

by icebear3000 2023. 5. 27.
반응형

포인터(Pointers)

 

 객체는 메모리에 존재합니다. 지금까지 변수를 통해 객체에 접근하고 조작하는 방법을 배웠습니다. 메모리에 있는 객체에 접근하는 또 다른 방법은 포인터를 통해 접근하는 것입니다. 메모리에 있는 각 객체는 일정한 바이트를 차지하며, 유형과 주소를 갖습니다. 이를 통해 포인터를 통해 객체에 접근할 수 있습니다. 따라서 포인터는 특정 객체의 주소를 저장할 수 있는 유형입니다. 설명을 위해 int 객체를 가리킬 수 있는 사용되지 않은 포인터를 선언할 것입니다.

int main()
{
int* p;
}

 

 p는 int* 유형이라고 말합니다. char(객체)를 가리키는 포인터를 선언하려면 char* 유형의 포인터를 선언합니다.

 

int main()
{
char* p;
}

 

 첫 번째 예시에서는 int* 유형의 포인터를 선언했습니다. 메모리에 있는 기존 int 객체를 가리키도록 하기 위해 주소 연산자 &를 사용합니다. p가 x를 가리킨다고 말합니다.

 

int main()
{
int x = 123;
int* p = &x;
}

 

 두 번째 예시에서는 char* 유형의 포인터를 선언했습니다.

 

int main()
{
char c = 'a';
char* p = &c;
}


어떠한 객체도 가리키지 않는 포인터를 초기화하기 위해 nullptr 리터럴을 사용할 수 있습니다. p는 이제 null 포인터라고 합니다.

 

int main()
{
char* p = nullptr;
}

 

 포인터는 다른 유형의 객체와 마찬가지로 변수/객체(variables/objects)입니다. 그 값은 객체가 저장된 메모리 위치인 객체의 주소입니다. 포인터로 가리키는 객체에 저장된 값을 접근하려면 포인터를 역참조해야 합니다. 역참조는 포인터(변수) 이름 앞에 역참조 연산자 *를 붙여 수행됩니다.

 

int main()
{
char c = 'a';
char* p = &c;
char d = *p;
}

 

 역참조된 포인터의 값을 출력하기 위해 다음을 사용할 수 있습니다.

 

#include <iostream>
int main()
{
char c = 'a';
char* p = &c;
std::cout << "The value of the dereferenced pointer is: " << *p;
}

//The value of the dereferenced pointer is: a

 

 

 이제 역참조된 포인터 *p의 값은 단순히 'a'입니다. 마찬가지로 정수 포인터에 대해서는 다음과 같을 것입니다.

 

#include <iostream>
int main()
{
int x = 123;
int* p = &x;
std::cout << "The value of the dereferenced pointer is: " << *p;
}

//The value of the dereferenced pointer is: 123

 

이 경우에 역참조된 포인터의 값은 123이 될 것입니다. 역참조된 포인터를 통해 가리키는 객체의 값을 변경할 수 있습니다.

 

#include <iostream>
int main()
{
int x = 123;
int* p = &x;
*p = 456; // change the value of pointed-to object
std::cout << "The value of x is: " << x;
}

//The value of x is: 456

 

지금까지 포인터에 대해 이야기하고, 특히 동적 메모리 할당(dynamic memory allocation)과 객체의 수명과 같은 개념을 다룰 때 스마트 포인터(smart pointers)에 대해 언급할 것입니다.

 

 

 
반응형

'IT > C++' 카테고리의 다른 글

C++ Strings(c_str() / Substrings)  (0) 2023.05.29
C++ References 정리  (0) 2023.05.28
C++이란?  (0) 2023.05.27
C++ 기초 총정리 요약  (0) 2023.04.24
ROS(Robot Operating System) 프로그래밍(Hello World Example, C++)  (0) 2023.04.11

댓글