[포인터]포인터 vs 배열

Jin Hur·2022년 11월 14일
0

C++

목록 보기
2/18

문자열을 포인터로 가리키기 vs 문자열을 배열에 담기

int main(){

	const char* test1 = "Hello World!";	// 컴파일 ok
    // 포인터는 주소를 담는 바구니
    // const char[13] 형의 문자 배열을 가리키는 포인터이다. 
    // 따라서 const char* 형 포인터 변수로만 가리킬 수 있다. 
    // test1은 문자열(문자 배열)의 첫번째 문자 주소를 가리키는 바구니
    // sizeof(test1) == 8 (cf, 솔루션 플랫폼: x64)
    
	char test2[] = "Hello World!";		// 컴파일 ok
    // 배열은 그 자체로 같은 데이터까리 붙어있는 바구니 모음
    // main의 스택 프레임에 데이터 공간이 존재하는 것이고, 
    // 특정 요소의 문자를 변경할 수 있다. (const char*로 가리키는 것과의 차이점)
    // test2는 문자 배열의 이름이자, 문자 배열의 첫번째 문자 주소를 가리키는 바구니
    // sizeof(test2) == 13	(배열이란 의미를 담고 있다.)
    
}

배열을 인자로 갖는 함수

아래와 같은 함수를 추가해본다.

void Test(char a[]) {
    a[0] = 'X';
}

컴파일러는 char a[] 매개변수를 char *a로 바꿔준다.
char[] -> char*

따라서 Test(test1)은 컴파일 에러가 난다. test1은 const 포인터형이기 때문이다. 반면 Test(test2)는 정상적으로 컴파일 완료되고, 배열의 첫번째 요소(문자)를 변경한다.

0개의 댓글