책 내용 질문하기
C언어 포인터변수 관련 의문점
도서
2020 시나공 정보처리기사 실기 [기본서]
페이지
84,88
조회수
318
작성일
2020-04-25
작성자
탈퇴*원
첨부파일

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라고 해줬는데,,

부탁드립니다 선생님 머리가 나빠서 죄송해요

답변
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이 들어가야 합니다.

 

행복한 하루되세요 :)

  • 관리자
    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이 들어가야 합니다.

     

    행복한 하루되세요 :)

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