새소식

인기 검색어

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

[언리얼 MMORPG pt1] 포인터 vs 배열

  • -
#include <iostream>
using namespace std;

// 오늘의 주제: 포인터 vs 배열

void TestFunc(char param[]) // 배열을 함수인자로 넘기면 알아서 포인터로 치환한다.
{
	// 어셈블리를 까 보면 결국 포인터로 전달
	param[0] = 'A';
}

int main()
{
	// 문자열 == 문자의 배열
	cout << "Hello World!" << endl;

	const char msg[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
	
	// 포인터와 배열의 차이
	// 
	// 포인터는 주소를 담는 바구니
	// msg_3 이라는 바구니가 따로 생성됨. (디스어셈블리 까봐)
	// msg_3 바구니의 크기 == 포인터의 크기 == 8바이트(64비트컴퓨터)
	const char* msg_3 = "Hello World!";

	// 배열은 [닭장] 즉, 그 자체로 같은 데이터끼리 붙어있는 '바구니 모음'
	// msg_2 라는 바구니가 생성되지 않음. (디스어셈블리 까봐)
	// 다만 [배열 이름]은 '바구니 모음'의 [시작 주소]
	char msg_2[] = "Hello World!";	
	cout << sizeof(msg_3) << endl; // 8바이트 -> 포인터의 크기(따로 주소를 담는 바구니가 생성됐다)
	cout << sizeof(msg_2) << endl; // 12바이트 -> 배열의 크기(배열 내용물만 있음)

	cout << msg << endl;


	// 배열을 함수의 인자로 넘기게 되면?
	TestFunc(msg_2); //msg_2가 바뀔까? 안바뀔까? -> 배열의 시작주소만 넘어가기 때문에 바뀜
	cout << msg_2 << endl;

	return 0;
}
Contents

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

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