책 내용 질문하기
4회 실전 모의고사
도서
2020 시나공 정보처리기사 실기 [기본서]
페이지
0
조회수
193
작성일
2020-07-21
작성자
탈퇴*원
첨부파일
문제 14번같이 배열이나 자료형을 함수로 넘겨줄때 값만을 넘길때와 주소값을 넘겨 함수에서 계산을해도 적용이되는때가 헷갈립니다 이부분에 대해서 알려주세요 그리고 c와 java에서이부분에 대한 차이점도있을까요
답변
2020-07-21 20:05:14

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

 

일반 변수(int a, char b, String c, float d 등)는 인수로 보내질 시 해당 변수에 저장된 값만이 전달됩니다. 단순 값이 전달되는 형태이기에 함수에서 지지고 볶아도 인수로 사용된 변수의 값이 변경될 여지가 없죠.

 

배열, 리스트, 클래스, 객체 등과 같은 여러 요소들을 포함하는 개체들은 해당 개체가 저장된 메모리의 주소가 전달됩니다. 때문에 함수에서 지지고 볶아버리면 메모리의 값이 반영되어버리므로 나중에 main 함수(메소드)로 돌아왔을 때 변경된 값들을 만날 수 있게 되죠.

(참고로 각 개체에 속한 단일 요소를 인수로 보내는 경우는 일반 변수와 같이 main에서 값의 변화가 없습니다. a가 1차원 배열일 때, a[i]를 인수로 쓴다면 배열이 가는게 아니라 a[i]의 값이 전달되는 것입니다.)

 

c와 java의 차이는 없습니다. c에서 포인터를 인수로 보내는 경우가 아니라면요.

포인터는 메모리 주소 그 자체이므로, 일반 변수라도 포인터값을 보내게 되면 메모리가 변경되어 main 함수에도 영향을 주게 됩니다.

 

행복한 하루되세요 :)

  • 관리자
    2020-07-21 20:05:14

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

     

    일반 변수(int a, char b, String c, float d 등)는 인수로 보내질 시 해당 변수에 저장된 값만이 전달됩니다. 단순 값이 전달되는 형태이기에 함수에서 지지고 볶아도 인수로 사용된 변수의 값이 변경될 여지가 없죠.

     

    배열, 리스트, 클래스, 객체 등과 같은 여러 요소들을 포함하는 개체들은 해당 개체가 저장된 메모리의 주소가 전달됩니다. 때문에 함수에서 지지고 볶아버리면 메모리의 값이 반영되어버리므로 나중에 main 함수(메소드)로 돌아왔을 때 변경된 값들을 만날 수 있게 되죠.

    (참고로 각 개체에 속한 단일 요소를 인수로 보내는 경우는 일반 변수와 같이 main에서 값의 변화가 없습니다. a가 1차원 배열일 때, a[i]를 인수로 쓴다면 배열이 가는게 아니라 a[i]의 값이 전달되는 것입니다.)

     

    c와 java의 차이는 없습니다. c에서 포인터를 인수로 보내는 경우가 아니라면요.

    포인터는 메모리 주소 그 자체이므로, 일반 변수라도 포인터값을 보내게 되면 메모리가 변경되어 main 함수에도 영향을 주게 됩니다.

     

    행복한 하루되세요 :)

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