오븐 노트

[C++] 다중 포인터 본문

Develop/C++

[C++] 다중 포인터

오 븐 2022. 7. 14. 23:39

사실상 2차 포인터를 초과하여 들어갈 일은 거의 없다.
있다면 소스가 문제가 있다고 볼 수 있을정도

#include <iostream>
using namespace std;

void SetNumber(int* a)
{
	*a = 1;
}

void SetMessage(const char* a)
{
	// .rdata Bye주소[B][y][e][\0]
	// [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(Hello주소))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(Bye주소))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(Hello주소))]
	a = "Bye";
}

void SetMessage(const char** a)
{
	// [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(&msg))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(&msg))] [매개변수(a(&msg))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(&msg))]
	*a = "Bye";
}

void SetMessage2(const char*& a)
{
	// [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(&msg))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(&msg))] [매개변수(a(&msg))][RET][지역변수]
	// [매개변수][RET][지역변수(msg(&msg))]
	a = "Wow";
}

int main()
{
	int a = 0;
	SetNumber(&a);
	cout << a << endl;

	// .rdata Hello주소[H][e][l][l][o][\0]
	// msg[ Hello주소 ] << 8바이트(64bit 운영체제 기준)
	const char* msg = "Hello";

	SetMessage(msg);
	// cout << msg << endl;

	// pp[ 주소1 ] << 8바이트
	// 주소1[ 주소2 ] << 8바이트
	// 주소2[ ] << const char형 1바이트
	// 
	// pp[ &msg ] << 8바이트
	// &msg[ Hello주소 ] << 8바이트
	// Hello주소[ .rdata Hello주소[H][e][l][l][o][\0] ] << const char형 1바이트
	const char** pp = &msg;
	SetMessage(&msg);
	cout << msg << endl;
	// *을 하나씩 타고 간다고 생각

	SetMessage2(msg);

	// 사실상 2차 포인터를 초과하여 들어갈 일은 거의 없다.
	// 있다면 소스가 문제가 있다고 볼 수 있을정도

	return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

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

[C++] 포인터 마무리  (0) 2022.07.15
[C++] 다차원 배열  (0) 2022.07.15
[C++] 로또 번호 생성기  (0) 2022.07.13
[C++] 포인터 vs 배열  (0) 2022.07.11
[C++] 배열 기초  (0) 2022.07.11