[개발] 프로그램 지식

[C++] C++ 포인터 이해하기

  • -
반응형

 

포인터 생성

포인터는 메모리 주소를 값으로 저장하는 변수입니다.

포인터 변수는 같은 유형의 데이터 유형(예: int 또는 string)을 가리키며 * 연산자로 생성됩니다. 작업 중인 변수의 주소가 포인터에 할당됩니다.

string food = "Pizza";  // A food variable of type string
string* ptr = &food;    // A pointer variable, with the name ptr, that stores the address of food

// Output the value of food (Pizza)
cout << food << "\n";

// Output the memory address of food (0x6dfed4)
cout << &food << "\n";

// Output the memory address of food with the pointer (0x6dfed4)
cout << ptr << "\n";

이 예제에서는 문자열 변수 food와 이 변수의 메모리 주소를 저장하는 포인터 ptr를 생성합니다. 그런 다음 food의 값과 메모리 주소를 출력합니다.

 

 

 

 

팁: 포인터 변수를 선언하는 방법은 세 가지가 있지만 첫 번째 방법이 더 선호됩니다.

  • string* mystring; // Preferred
  • string *mystring;
  • string * mystring;

 

 

 

 

 

 

 

 

 

 

 

 

 

역참조

메모리 주소와 값 가져오기

이전 페이지의 예에서 우리는 포인터 변수를 사용하여 변수의 메모리 주소를 얻었습니다(& 연산자와 함께 사용). 그러나 * 연산자(역참조 연산자)를 사용하여 포인터를 통해 변수의 값을 얻을 수도 있습니다.

string food = "Pizza";  // Variable declaration
string* ptr = &food;    // Pointer declaration

// Reference: Output the memory address of food with the pointer (0x6dfed4)
cout << ptr << "\n";

// Dereference: Output the value of food with the pointer (Pizza)
cout << *ptr << "\n";

이 예제에서는 포인터 ptr을 사용하여 food의 메모리 주소를 출력한 후, 역참조 연산자(*)를 사용하여 food의 값을 출력합니다.

여기서 이 * 기호는 혼동스러울 수 있습니다. 왜냐하면 우리 코드에서 이 기호는 두 가지 다른 일을 하기 때문입니다.

  • string* ptr 선언에서 사용하면 포인터 변수를 생성합니다.
  • 선언에 사용되지 않으면 역참조 연산자로 작동합니다.

 

 

 

 

 

 

 

 

 

포인터 값 수정

포인터의 값을 변경할 수도 있습니다. 하지만 이렇게 하면 원래 변수의 값도 변경된다는 점에 유의하세요.

string food = "Pizza";
string* ptr = &food;

// Output the value of food (Pizza)
cout << food << "\n";

// Output the memory address of food (0x6dfed4)
cout << &food << "\n";

// Access the memory address of food and output its value (Pizza)
cout << *ptr << "\n";

// Change the value of the pointer
*ptr = "Hamburger";

// Output the new value of the pointer (Hamburger)
cout << *ptr << "\n";

// Output the new value of the food variable (Hamburger)
cout << food << "\n";

이 예제에서는 포인터 ptr을 사용하여 food의 값을 "Hamburger"로 변경합니다. 포인터를 통해 값을 변경하면 원래 변수 food의 값도 함께 변경됩니다.

코드 설명:

  • string food = "Pizza";: food라는 문자열 변수를 선언하고 "Pizza"로 초기화합니다.
  • string* ptr = &food;: food 변수의 주소를 저장하는 포인터 ptr를 선언합니다.
  • cout << food << "\n";: food 변수의 값을 출력합니다.
  • cout << &food << "\n";: food 변수의 메모리 주소를 출력합니다.
  • cout << ptr << "\n";: 포인터 ptr에 저장된 메모리 주소를 출력합니다.
  • cout << *ptr << "\n";: 포인터 ptr을 통해 food 변수의 값을 출력합니다.
  • *ptr = "Hamburger";: 포인터 ptr을 통해 food 변수의 값을 "Hamburger"로 변경합니다.
  • cout << *ptr << "\n";: 포인터 ptr을 통해 변경된 값을 출력합니다.
  • cout << food << "\n";: 변경된 food 변수의 값을 출력합니다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.