책 내용 질문하기
[2021 정보처리기사 실기] 2권 214p 포인터 예제 질문
도서
2021 시나공 정보처리기사 실기
페이지
214
조회수
235
작성일
2021-04-04
작성자
탈퇴*원
첨부파일

안녕하세요

 

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의 차이가 어떻게 되나요?

답변
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의 위치에 있는 문자부터 마지막 문자까지의 모든 글자를 출력하게 됩니다.

 

행복한 하루되세요 :)

  • 관리자
    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의 위치에 있는 문자부터 마지막 문자까지의 모든 글자를 출력하게 됩니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.