오븐 노트

[C++] 포인터 vs 배열 본문

Develop/C++

[C++] 포인터 vs 배열

오 븐 2022. 7. 11. 22:32
#include <iostream>
using namespace std;

void Test(int a)
{
	a++;
}

// 배열을 함수 인자로 넘기면, 컴파일러가 알아서 포인터로 치환함 (char[] -> char*)
// 즉 배열의 내용 전체를 넘긴게 아니라, 시작 주소(포인터)만 넘긴 것
// 주소값을 이용하여 원본을 수정함
void Test(char a[])
{
	a[0] = 'x';
}

int main()
{
	// .data 주소[H][e][l][l][o][][W][o][r][l][d][\0]
	// test1[주소] << 64비트 기준 8바이트
	// 아무리 저장 값이 늘어나도 포인터 변수 자체의 크기는 주소값이므로 고정됨
	// 주소 저장
	const char* test1 = "Hello World";

	// .data 주소[H][e][l][l][o][][W][o][r][l][d][\0]
	// [H][e][l][l][o][][W][o][r][l][d][\0]
	// test2 = 주소
	// 값이 늘어나면 포인터 하나의 크기만큼 변수의 크기가 계속 늘어남
	// const인 문자열 포인터와 다르게 하나하나 값 변경이 가능해짐
	// 실질적인 값 저장
	char test2[] = "Hello World";

	// 포인터는 [주소를 담는 바구니]
	// 배열은 그 자체로 같은 데이터끼리 붙어있는 바구니의 모음
	// - 다만 배열 이름은 바구니 모음의 시작 주소

	int a = 0;
	// 호출[매개변수][RET][지역변수(a=0)]함수[매개변수(a=1)][RET][지역변수] 변화 X
	Test(a);
	cout << a << endl;

	// 배열의 시작 주소만 넘김
	Test(test2);
	cout << test2 << endl;

	// 참조와 다르게 배열과 포인터는 실행 동작 자체가 엄연히 다름

	return 0;
}

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

 

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

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

[C++] 다중 포인터  (0) 2022.07.14
[C++] 로또 번호 생성기  (0) 2022.07.13
[C++] 배열 기초  (0) 2022.07.11
[C++] 포인터 vs 참조  (0) 2022.07.10
[C++] 참조 기초  (0) 2022.07.10