본문 바로가기
c언어/기본 개념

문자열 상수(char*)에 대한 이해

by 감조자림 2022. 12. 15.

char* p = "Hello World";라고 한 경우, 포인터 변수 p에는 텍스트 세그먼트에 저장되어 있는 Hello World라는 문자열의 주소가 저장된다(제일 첫 문자인 H의 주소).

이 상태에서 p = "Goodbye"; 라고 할 경우 포인터 변수 p에 저장되어 있는 주소값이 Goodbye 라는 문자열의 주소로 바뀐다. 

재밌는 건, 

char* p = "Hello World";
char* p2 = "Goodbye";
p = "Goodbye";

라고 할 경우 p와 p2의 값이 같게 나온다. p에 저장된 주소와 p2에 저장된 주소가 같아지는 것이다. p = "Goodbye"; 라고 했을 때, Goodbye라는 문자열이 새롭게 하나 더 만들어지고 p가 그곳의 주소를 가지는 게 아니라 p2를 선언할 때 만들어진 Goodbye를 가리키게 되는 것으로 보인다. (문법적으로 생각해보면 그게 당연한 것 같기도 하다. p 는 포인터 변수인데 p에 "Goodbye"라는 문자열을 넣는다는 건 말이 안 되니까)

-> 위와 같은 코드는 p와 p2라는 변수에 메모리 주소를 할당하는 것이다. p = "Goodbye";라는 코드도 그저 Goodbye라는 문자열의 주소를 할당하는 것이다. 

 

'c언어 > 기본 개념' 카테고리의 다른 글

포인터  (2) 2022.12.03
void*  (0) 2022.12.02
const의 의미, 활용법  (0) 2022.11.10
구조체를 가리키는 포인터와 간접 멤버 연산자 ->  (0) 2022.11.10
*과 & 의 차이  (0) 2022.09.24

댓글