이렇게 하면 오류가 보고되지 않지만 p가 가리키는 123 문자열을 수정하려고 하면 메모리 액세스 위반이 발생합니다. "123"은 문자열 상수이므로 읽기 전용 저장 영역에 저장됩니다. const char*이 필요한 이유는 프로그래머가 실수로 123을 수정하는 것을 방지하기 위함입니다.
초보자를 위한 답변 "123"은 const char 유형의 객체입니다. const char * p는 오른쪽에서 왼쪽으로 읽어야 합니다. 즉, p는 포인터이고 가리키는 객체는 const char 유형입니다. 이것은 정확하지 않습니다. 같은 방식으로 p가 가리키는 객체가 const char인 한 끝에 p = "456";을 추가하는 것이 옳습니다.
이렇게 하면 오류가 보고되지 않지만 p가 가리키는
123
문자열을 수정하려고 하면 메모리 액세스 위반이 발생합니다. "123"은 문자열 상수이므로 읽기 전용 저장 영역에 저장됩니다.const char*
이 필요한 이유는 프로그래머가 실수로123
을 수정하는 것을 방지하기 위함입니다.초보자를 위한 답변
"123"은 const char 유형의 객체입니다. const char * p는 오른쪽에서 왼쪽으로 읽어야 합니다. 즉, p는 포인터이고 가리키는 객체는 const char 유형입니다. 이것은 정확하지 않습니다. 같은 방식으로 p가 가리키는 객체가 const char인 한 끝에 p = "456";을 추가하는 것이 옳습니다.
char *p = "123";
은 문자 배열을 나타냅니까? 문자열입니다
으아악-Wall
을 컴파일하고 추가하면 경고가 표시됩니다.char *p = "123"; 실제로는 두 개의 프로세스입니다. 상수 영역에 문자열 공간을 할당하고, 문자 포인터 p를 선언하고, p가 문자열이 있는 메모리 공간을 가리킵니다. 즉시 정정해주세요
C언어가 남긴 함정
이것은 c와의 호환성을 위해 남겨둔 것입니다