책 내용 질문하기
1권 87쪽 4번 문의
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
87
조회수
244
작성일
2019-08-17
작성자
탈퇴*원
첨부파일

scanf 함수를 쓸 때 일반변수 앞에는 &를 사용하는 반면, 배열과 포인터 변수에는 사용하지 않는다고 알고있습니다.

 

scanf("%d", &a[i]);  << 그런데 이 코드에서 a[i] 앞에 &가 붙는 이유가 뭔가요? a[i]는 이미 선언된 a[5]로 배열이라 &이 안붙어야 하는게 아닌가요? 

답변
2019-08-19 10:10:31

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

 

정확히 설명드리자면,

함수 scanf의 두 번째 인수는 [메모리 위치값](=포인터)이어야 합니다.

 

위치값(포인터)을 가리키는 것들에는 먼저 배열'명'이 있습니다.

int a[3]을 선언했다면

'a'라는 이름은 배열의 각 요소(a[0], a[1], a[2])의 시작 위치를 가리키는 포인터의 역할을 합니다.

 

다음은 위치값을 가리키는 예약어 '&'가 있겠네요.

아시는 바와 같이 일반 변수들 앞에 &를 적어주면 해당 변수가 저장된 메모리 위치인 포인터값을 나타냅니다.

 

다음은 포인터 변수입니다.

int *a; 와 같이 선언되어 태생부터 포인터만을 저장하겠다고 선언한 변수죠.

이 경우 a는 '&'를 사용하지 않고도 scanf의 인수로 사용될 수 있습니다.

 

기타 여러가지가 있으나 기사 수준에서는 이정도까지 다루어집니다.

 

그럼 질문하신 배열'명'이 아닌 배열'요소'는 어떠할까요.

배열요소들의 사용례를 생각해보세요.

a[1]=3;

a[2]=5;

위치값을 저장하고 있는 변수들은 예약어 '*'을 사용해주어야 함에도, 일반 변수처럼 사용되고 있음을 알 수 있습니다.

이 경우 해당 위치의 주소값을 가리키는 '&'를 사용해야 scanf의 인수로 사용할 수 있게됩니다.

 

행복한 하루되세요 :)

 

  • 관리자
    2019-08-19 10:10:31

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

     

    정확히 설명드리자면,

    함수 scanf의 두 번째 인수는 [메모리 위치값](=포인터)이어야 합니다.

     

    위치값(포인터)을 가리키는 것들에는 먼저 배열'명'이 있습니다.

    int a[3]을 선언했다면

    'a'라는 이름은 배열의 각 요소(a[0], a[1], a[2])의 시작 위치를 가리키는 포인터의 역할을 합니다.

     

    다음은 위치값을 가리키는 예약어 '&'가 있겠네요.

    아시는 바와 같이 일반 변수들 앞에 &를 적어주면 해당 변수가 저장된 메모리 위치인 포인터값을 나타냅니다.

     

    다음은 포인터 변수입니다.

    int *a; 와 같이 선언되어 태생부터 포인터만을 저장하겠다고 선언한 변수죠.

    이 경우 a는 '&'를 사용하지 않고도 scanf의 인수로 사용될 수 있습니다.

     

    기타 여러가지가 있으나 기사 수준에서는 이정도까지 다루어집니다.

     

    그럼 질문하신 배열'명'이 아닌 배열'요소'는 어떠할까요.

    배열요소들의 사용례를 생각해보세요.

    a[1]=3;

    a[2]=5;

    위치값을 저장하고 있는 변수들은 예약어 '*'을 사용해주어야 함에도, 일반 변수처럼 사용되고 있음을 알 수 있습니다.

    이 경우 해당 위치의 주소값을 가리키는 '&'를 사용해야 scanf의 인수로 사용할 수 있게됩니다.

     

    행복한 하루되세요 :)

     

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