#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;
}