새소식

인기 검색어

게임 개발/언리얼 강의 (클라-서버)

[언리얼 MMORPG pt1] 다중 포인터

  • -

#include <iostream>
using namespace std;

// 오늘의 주제: 다중 포인터

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

/*
* 에서 const가 별표 전에 오느냐 뒤에 오느냐에 따라 의미가 다른데
별표 전에 오면 msg 자체는 다른 주소로 교체 가능하되 (msg는 주소를 담는 바구니죠),
실제 그 주소를 타고 가서 있는 데이터 (char)를 바꿀 수 없다는 의미입니다.
반면 const가 별표 뒤에 오면,  포인터 값 자체를 바꿀 수 없게 됩니다.
*/


void SetMessage(const char* msg)
{
	// msg 매개변수는 스택에 추가로 생성된다.
	// 즉 main 함수의 msg와는 다른 메모리 공간에 저장된다.
	// 즉, 값복사가 이루어진것.
	msg = "Bye"; // r/o 데이터 영억에 저장된 bye 데이터의 주소를 msg에 복사
	cout << msg << endl;
}

// 포인터의 포인터
void SetMessage2(const char** msg)
{
	*msg = "Bye"; // r/o 데이터 영억에 저장된 bye 데이터의 주소를 *msg에 복사
	cout << *msg << endl;
}



int main()
{
	// "Hello"라는 문자열의 타입은?
	cout<< typeid("Hello").name() << endl; // const char[6]

	// char* 에서 문자열의 초기화 방식은
	// 상수 문자열 데이터를 Data영역에 생성하고 그 주소를 넘겨주는 방식
	// "Hello"라는 상수값의 주소를 test에 저장, Hello의 저장 공간 자체는 못 바꿈
	// 그러나 test라는 포인터 값 자체는 다른 주소로 바꿀 수 있음
	const char* test = "Hello";

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

	const char* msg = "Hello";
	SetMessage(msg);
	cout << msg << endl;

	SetMessage2(&msg);
	cout << msg << endl;



	return 0;
}
Contents

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

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