안녕하세요
, 전 성주님이 작성c언어 코딩도장 ebook 1306~1308p에서 왜냐하면 char s1[10] ="Hello";는
배열에 문자열이 모두 복사되기 떄문입니다.라는 표현이 이해가 안갑니다
회신: 안녕하세요
, 도장_ 관리자님이 작성Unit 39.4의 예제 string_array_element_assign.c를 보면
많은 C 언어 책들은 첫 번째 줄의 코드를 문자열을 할당한다고 가르치지만, 잘못된 표현입니다. 실제로 내부 동작은 "Hello"는 문자열 리터럴이고, 문자열 리터럴을 위한 메모리 공간이 할당되고 "Hello"가 들어갑니다. 문자열 리터럴에서 '리터럴'은 '있는 그대로'라는 뜻이고, 이는 변경 불가능하다는 뜻입니다. 쉽게 말해 '읽기 전용'입니다.
"Hello"는 메모리에 있는 문자열 리터럴이고, 이를 배열 s1에 복제하는 과정이 일어납니다. 이게 첫 번째 줄입니다.
배열에 있는 데이터는 코드 실행 중에 변경할 수 있습니다. 따라서 s1[0] = 'A';처럼 배열의 데이터를 바꾸는 것이 가능합니다. 여기서도 'A'는 문자 리터럴이고, s1[0]에 복제하는 과정이 일어납니다. 보통은 이 과정 전체를 '할당한다'고 합니다.
ps. 전자책 페이지는 디바이스마다 다릅니다. Unit 번호를 표기해주면 좋습니다.
char s1[10] = "Hello"; // 크기가 10인 char형 배열을 선언하고 문자열 할당
// 배열에 문자열이 복사됨
s1[0] = 'A'; // 문자 배열의 인덱스 0에 문자 A를 할당
많은 C 언어 책들은 첫 번째 줄의 코드를 문자열을 할당한다고 가르치지만, 잘못된 표현입니다. 실제로 내부 동작은 "Hello"는 문자열 리터럴이고, 문자열 리터럴을 위한 메모리 공간이 할당되고 "Hello"가 들어갑니다. 문자열 리터럴에서 '리터럴'은 '있는 그대로'라는 뜻이고, 이는 변경 불가능하다는 뜻입니다. 쉽게 말해 '읽기 전용'입니다.
"Hello"는 메모리에 있는 문자열 리터럴이고, 이를 배열 s1에 복제하는 과정이 일어납니다. 이게 첫 번째 줄입니다.
배열에 있는 데이터는 코드 실행 중에 변경할 수 있습니다. 따라서 s1[0] = 'A';처럼 배열의 데이터를 바꾸는 것이 가능합니다. 여기서도 'A'는 문자 리터럴이고, s1[0]에 복제하는 과정이 일어납니다. 보통은 이 과정 전체를 '할당한다'고 합니다.
ps. 전자책 페이지는 디바이스마다 다릅니다. Unit 번호를 표기해주면 좋습니다.