1권 84쪽과 88쪽 문제 1번에 관한 내용입니다.
84쪽 예제1에서
printf(%d, *b); 이 내용은 이해가 잘 됐어요.
b라는 포인터변수가 가지고 있는 주소값의 주소가 가지고 있는 데이터를 출력하라는 의미잖아요?
그런데 88쪽 문제 1번을 보면
char *str;
str = "KOREA"; //1번문장
printf(%8.3s\n,str); //2번문장이라고 할게요.
이렇게 되어있어요.
사실 저는 1번 문장도 이해가 안돼요..
str은 포인터변수이고 어떤 메모리의 주소를 저장하고 있는 녀석이고
여기에다가 문자열을 코리아를 저장해준다는 소리인데
왜 str이 가지고 있는 주소값에서의 메모리에 저장이 되는건가요?
*str이 맞다고 생각했어요ㅠㅠ
그리고 2번 문장에서 왜 *str 이 아니라 그냥 str인가요? 정수형에서는 *b라고 해줬는데,,
부탁드립니다 선생님 머리가 나빠서 죄송해요
안녕하세요 길벗수험서 운영팀입니다.
많은 수험생들이 의문을 갖는 내용이며, 수험서의 특성상 언어에 대해 깊게 설명하는데 한계가 있어 충분히 설명드리지 못한 부분이니 이해가 어려운 것은 당연합니다.
char *str;
str = "KOREA";
는 다음과 같이 바꿔서 작성할 수 있습니다.
char str[] = "KOREA";
배열명(str)은 기본적으로 주소를 저장합니다.
배열의 각 요소에 값이 저장되는 형태죠. str[0]='K', str[1]='O' ...
즉 문제의 코드는 포인터 변수를 선언함과 동시에 문자 배열을 선언한 것과 동일한 의미를 지니고, 해당 배열에 문자 첫 주소(str)부터 차례대로 "KOREA"라는 문자열을 저장하게 됩니다.
------------------
문자열을 출력하는 서식 지정자가 별도로 있음을 염두에 두세요.
여러개의 문자를 출력하는 %s 서식지정자는 %d나 %c와는 다르게 문자배열의 첫 주소를 받아 첫 문자부터 마지막 문자까지 모두 출력하는 역할을 수행합니다.
때문에 %s에 대응하는 값은 '주소'여야 하므로, *str이나 str[0]이 아닌 str이 들어가야 합니다.
행복한 하루되세요 :)
-
관리자2020-04-27 14:21:59
안녕하세요 길벗수험서 운영팀입니다.
많은 수험생들이 의문을 갖는 내용이며, 수험서의 특성상 언어에 대해 깊게 설명하는데 한계가 있어 충분히 설명드리지 못한 부분이니 이해가 어려운 것은 당연합니다.
char *str;
str = "KOREA";
는 다음과 같이 바꿔서 작성할 수 있습니다.
char str[] = "KOREA";
배열명(str)은 기본적으로 주소를 저장합니다.
배열의 각 요소에 값이 저장되는 형태죠. str[0]='K', str[1]='O' ...
즉 문제의 코드는 포인터 변수를 선언함과 동시에 문자 배열을 선언한 것과 동일한 의미를 지니고, 해당 배열에 문자 첫 주소(str)부터 차례대로 "KOREA"라는 문자열을 저장하게 됩니다.
------------------
문자열을 출력하는 서식 지정자가 별도로 있음을 염두에 두세요.
여러개의 문자를 출력하는 %s 서식지정자는 %d나 %c와는 다르게 문자배열의 첫 주소를 받아 첫 문자부터 마지막 문자까지 모두 출력하는 역할을 수행합니다.
때문에 %s에 대응하는 값은 '주소'여야 하므로, *str이나 str[0]이 아닌 str이 들어가야 합니다.
행복한 하루되세요 :)