다중 포인터

이승덱·2021년 7월 21일

CPP

목록 보기
23/70
#include <iostream>

using namespace std;

//다중 포인터

//삼차 포인터 이상의 포인터는 거의 쓰지 않는다

//밑의 예제와 같이 rdata에 저장된 문자열을 수정하고싶을 때 사용

void SetNumber(int* a) {

 *a = 2;

}

// 문자열 상수를 직접 받기 때문에 const char형으로 인자를 받는다.
void SetMessage(const char* a) {

 //a라는 포인터에 msg를 받았기 때문에 a는 지역변수로 msg를 단순히 복사한 변수

 a = "Bye"; //.rdata에 저장된 Bye의 주소로 바구니 내의 주소를 변경

 //즉 msg가 가진 주소로 접근하여 주소가 나타내는 값을 바꾸길 원했지만?

 //사실은 복사된 지역변수 a가 가진 주소를 바꾼 것이다.

 //주소를 직접 접근해서 바꾼 것이 아니고 지역변수의 값을 바꾼것과 마찬가지

 //따라서 이 함수가 끝나면 지역변수는 소멸되므로 아무것도 바뀐 것이 없다.

 cout << a << endl;

}

void SetMessage(const char** a) {

 //위 함수와는 다르게 이중 포인터를 사용

 //a라는 지역변수는 msg의 주소를 가지고 있기 때문에 msg에 직접 접근 가능

 //따라서 *a는 msg로 직접 접근을 한 것이고 그 안에 있는 데이터를 .rdata에 저장되어 있는 bye의 시작주소로 바꿈

 *a = "bye"; 

}

void SetMessage(const char*& a,int t) {

 

 a = "wow";

}

int main()

{

 int number = 1;

 int* a;

 a = &number;

 const char* msg = "Hello"; //.rdata에 저장된 Hello의 주소를 불러옴

 SetMessage(msg);

 cout << msg << endl;

 //pp[ 주소1 ] <<8바이트

 //주소1[ 주소 2] <<8바이트

 //주소2[   ] <<1바이트

 const char** pp = &msg;

 SetMessage(&msg);

 SetMessage(msg,0);

 cout << msg << endl;

 return 0;

}
profile
공부 기록용 블로그입니다

0개의 댓글