안녕하세요 길벗수험서 운영팀입니다.
일반 변수(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 함수에도 영향을 주게 됩니다.
행복한 하루되세요 :)