안녕하세요
214p 포인터 예제에 있는
⑧⑨⑩ 부분에 있는
printf("%c", s[i]);
printf("%c", *(s+i));
printf("%s\n", s+i);
이게 각각 어떻게 해석되는지 해설을 봐도 이해가 되지 않습니다.
1. 문자를 출력할때 s[i] 와 *(s+i) 는 같은 의미인건가요? (다른 문제 풀이 할 때도 예를 들어 문자출력에 *(s+3)이라면, s[3]으로 생각하면 되나요?)
2. printf("%c", *(s+i)를 읽는(?) 방법이라고 해야하나요 어떻게 풀이하면 되나요? *이 있으니 포인터 변수를 뜻하는거 맞나요?
3. 문자열을 출력하는 것이 어렵습니다. 만약 문자열출력에 s만 있다면 s에 해당하는 gilbut이 모두 출력이 되나요?
4. 문자열 출력도 위에 문자 출력처럼 *(s+i) 이런 형태가 올 수 있나요? 올 수 있다면 *(s+i)와 s+i의 차이가 어떻게 되나요?
안녕하세요 길벗수험서 운영팀입니다.
[1]
예, 동일하다고 보시면 됩니다.
[2]
*는 두가지 경우가 있습니다.
선언할 때 사용하는 * 는(2, 5번) "이 변수는 포인터 변수로 사용할 것이다."
선언 외의 다른 장소에서 사용하는 * 는(3, 4, 9번) "* 뒤의 주소가 가리키는 곳의 값"이라는 의미를 갖습니다.
printf("%c", *(s+i))를 풀어보자면 (s+i)라는 주소가 가리키는 곳의 값을 문자(%c)로 출력해라 라는 뜻이죠.
[3]
예, 맞습니다.
%s는 앞에서는 단순히 문자열을 출력하는 서식지정자라고 배웠지만, 좀더 자세하게 설명하자면
입력된 주소부터 마지막까지의 모든 글자를 출력하는 서식지정자입니다.
[4]
%s는 기본적으로 주소를 인수로 받기 때문에 *(s+i)의 형태는 올 수 없습니다. (오류)
s+i를 인수로 %s를 출력하게 된다면 s+i의 위치에 있는 문자부터 마지막 문자까지의 모든 글자를 출력하게 됩니다.
행복한 하루되세요 :)
-
관리자2021-04-05 17:41:09
안녕하세요 길벗수험서 운영팀입니다.
[1]
예, 동일하다고 보시면 됩니다.
[2]
*는 두가지 경우가 있습니다.
선언할 때 사용하는 * 는(2, 5번) "이 변수는 포인터 변수로 사용할 것이다."
선언 외의 다른 장소에서 사용하는 * 는(3, 4, 9번) "* 뒤의 주소가 가리키는 곳의 값"이라는 의미를 갖습니다.
printf("%c", *(s+i))를 풀어보자면 (s+i)라는 주소가 가리키는 곳의 값을 문자(%c)로 출력해라 라는 뜻이죠.
[3]
예, 맞습니다.
%s는 앞에서는 단순히 문자열을 출력하는 서식지정자라고 배웠지만, 좀더 자세하게 설명하자면
입력된 주소부터 마지막까지의 모든 글자를 출력하는 서식지정자입니다.
[4]
%s는 기본적으로 주소를 인수로 받기 때문에 *(s+i)의 형태는 올 수 없습니다. (오류)
s+i를 인수로 %s를 출력하게 된다면 s+i의 위치에 있는 문자부터 마지막 문자까지의 모든 글자를 출력하게 됩니다.
행복한 하루되세요 :)