책 내용 질문하기
86쪽 3번
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
86
조회수
153
작성일
2019-10-02
작성자
탈퇴*원
첨부파일

설명을 하기가 굉장히 난해한데 86쪽 3번 해설을 보시면 ⑦을 보시면 배열 st가 가리키는 곳의 주소에서 k만큼 증가한 주소가 가리키는 곳의 값을 저장한다 라고 나오는데

도대체 주소가 가리키는 값을 어떻게 st[0] 이라고 해석을 할수있나요?

한마디로 해설을 쭉보면 temp = *(st + k); 에서 temp 값이 st[0] 이 저장된다는건데 그럼 temp = *st 라는 말인가요?

 

이해가좀 많이 안되는데 p.80 쪽보시면 유사한 문제가 있는데 이 문제는 이해가 되는이유가 머냐면 배열을 선언하고 포인터 변수까지 선언해서 p=a라는 말이 나왔기 때문에 저렇게 출력해야한다는것을 알겠는데 p.86 쪽은 포인터 변수 선언도 없고 치환한다는 말도 없고 이해가 너무 안됩니다.

 

배열이름을 주소로 사용한다는 것은 알겠는데 그럼 80쪽도 굳이 포인터 변수를 선언안하고 86쪽 처럼 할수도 있다는 말인가요? 

답변
2019-10-04 10:43:23

안녕하세요 길벗수험서 운영팀입니다.

 

예, 말씀하신대로 80쪽 또한 86쪽 처럼 포인터 변수 없이, 배열명(a)만을 활용하여 출력이 가능합니다.

printf("%d", *(a+i));

 

배열명은 말씀하시는 것과 같이 배열의 첫 주소를 가리킵니다.

즉, st = &st[0] 이죠.

st+1이라는 말은 st[0]에서 1만큼 뒤에 위치한 자료를 가리키게 됩니다. &st[1]을 말이죠.

 

k가 0인 경우

st+k는 st를 의미하고 *(st+k)는 결국 *(&st[0])이 되니, st[0]의 값을 의미하게 됩니다.

k가 1인 경우는

*(st+1) = *(&st[0]+1) = *(&st[1]) 이 되어 st[1]의 값을 나타내게 되죠.

 

이해가 안되신 부분이 있다면 해당 부분을 좀더 구체적으로 질문주시면 자세한 안내가 가능할 것 같습니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-10-04 10:43:23

    안녕하세요 길벗수험서 운영팀입니다.

     

    예, 말씀하신대로 80쪽 또한 86쪽 처럼 포인터 변수 없이, 배열명(a)만을 활용하여 출력이 가능합니다.

    printf("%d", *(a+i));

     

    배열명은 말씀하시는 것과 같이 배열의 첫 주소를 가리킵니다.

    즉, st = &st[0] 이죠.

    st+1이라는 말은 st[0]에서 1만큼 뒤에 위치한 자료를 가리키게 됩니다. &st[1]을 말이죠.

     

    k가 0인 경우

    st+k는 st를 의미하고 *(st+k)는 결국 *(&st[0])이 되니, st[0]의 값을 의미하게 됩니다.

    k가 1인 경우는

    *(st+1) = *(&st[0]+1) = *(&st[1]) 이 되어 st[1]의 값을 나타내게 되죠.

     

    이해가 안되신 부분이 있다면 해당 부분을 좀더 구체적으로 질문주시면 자세한 안내가 가능할 것 같습니다.

     

    행복한 하루되세요 :)

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