안녕하세요
, 전 성주님이 작성#include <stdio.h> int main() { char *s1 = "Hello"; // 포인터에 문자열 Hello의 주소 저장 // Hello가 있는 메모리 주소는 읽기 전용 s1[0] = 'A'; // 문자열 포인터의 인덱스 0에 문자 A를 할당 // 실행 에러 printf("%c\n", s1[0]); return 0; }
s1[0] = 'A'; //이 부분에대해서 질문이 있습니다.문자열 포인터에서 인덱스 0에 문자 A를 할당하는거랑 포인터 S1의 주소값이 바뀌는거이랑 무슨 상관인가요??
회신: 안녕하세요
, 도장_ 관리자님이 작성"Hello"는 문자열 리터럴입니다. 이전 답변을 참고하세요.
char *s1 = "Hello";에서 s1은 문자열 리터럴을 가리키는 포인터일 뿐입니다. 문자열 리터럴은 변경 불가능, 즉 읽기 전용이므로 포인터를 이용해도 값을 바꿀 수 없습니다.
포인터로 배열을 가리키거나, malloc처럼 동적으로 할당한 메모리를 가리킬 때만 포인터를 통해 값을 바꿀 수 있습니다. 포인터는 학습을 계속하면서 익숙해지는 게 좋고, 2-3회 반복하는 게 좋습니다.