책 내용 질문하기
2권 228쪽 1번 문제
도서
2022 시나공 정보처리기사 실기
페이지
228
조회수
240
작성일
2022-07-16
작성자
탈퇴*원
첨부파일
main 함수에서 전달한 a[] 값이 align 함수에서 영향을 받는 이유가 뭔가요? 주소값을 전달했다는건 main에서 선언된 변수들을 다른 함수에 전달할때 모두 주소값으로 전달되는건가요? 그렇다면 main 함수에 선언된 변수들은 모두 전역변수라고 생각해도 되는건가요?
답변
2022-07-19 20:21:17

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

 

main()에서 선언되어도 지역 변수입니다.

main() 밖, main과 같이 여백 없이 왼쪽 끝단에서 선언되어야 전역 변수입니다.

교재 285쪽 40번 문제의 Top과 같은 변수가 전역 변수에 해당합니다.

 

본래 일반 변수를 인수로 사용하여 함수를 호출하면 변수에 저장된 값만 전달이 됩니다.

함수로 넘어간 값은 지지고 볶고 한다고 해도 변수의 값이 변경될 일은 없죠.

 

전역 변수를 함수에서 수정한다거나,

메모리의 주소를 전달하여 메모리의 값을 변경하게 되는 경우에는 main()으로 돌아와서도 변경된 값에 영향을 받게 되는 것입니다.

 

즉 해당 문제에서는 a[] 가 저장된 메모리의 위치를 전달하였고, 함수에서는 그 위치의 값들을 직접 수정했기 때문에

돌아와서 a[]의 값들을 다시 조회해보니 해당 위치의 메모리에는 변경된 값이 있었다... 가 되는 것이죠.

 

행복한 하루되세요 :)

  • 관리자
    2022-07-19 20:21:17

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

     

    main()에서 선언되어도 지역 변수입니다.

    main() 밖, main과 같이 여백 없이 왼쪽 끝단에서 선언되어야 전역 변수입니다.

    교재 285쪽 40번 문제의 Top과 같은 변수가 전역 변수에 해당합니다.

     

    본래 일반 변수를 인수로 사용하여 함수를 호출하면 변수에 저장된 값만 전달이 됩니다.

    함수로 넘어간 값은 지지고 볶고 한다고 해도 변수의 값이 변경될 일은 없죠.

     

    전역 변수를 함수에서 수정한다거나,

    메모리의 주소를 전달하여 메모리의 값을 변경하게 되는 경우에는 main()으로 돌아와서도 변경된 값에 영향을 받게 되는 것입니다.

     

    즉 해당 문제에서는 a[] 가 저장된 메모리의 위치를 전달하였고, 함수에서는 그 위치의 값들을 직접 수정했기 때문에

    돌아와서 a[]의 값들을 다시 조회해보니 해당 위치의 메모리에는 변경된 값이 있었다... 가 되는 것이죠.

     

    행복한 하루되세요 :)

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