:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
06/05/06 14:54
음 parameter passing 에 관한 문제군요.. 일단 call by address 에 관해 어느 정도 아신다고 가정하고 설명 드리면, main 함수에서 a,b 변수의 값을 입력 받았습니다. 그리고 addmin 함수가 call 됐죠. 그런데 addmin 함수는 변수로 두 개의 int 형 주소를 받습니다. 자, 그럼 main 함수 내의 addmin( , ) <= 이 괄호 안에 두 개의 주소가 들어가야 겠죠? 그래서 addmin( &a, &b) 가 됐습니다. 즉, addmin 함수에 변수 a 의 주소와 변수 b 의 주소를 넘겨줬습니다.
이제 두 개의 주소를 변수로 받은 addmin 함수가 돌아가야겠죠. 아까도 말했지만, addmin 함수는 두 개의 int 형 주소를 받아서 돌아가는 함수입니다. 여기에는 그 두 개의 주소를 a 와 b 라고 부르네요 ( main 함수 내의 a,b 와는 전혀 다른겁니다! 즉, addmin 내의 a,b 를 addr_a, addr_b 라고 해도 되고, c,d 라고 해도 되고, x,y 라고 해도 됩니다. ) addmin 함수는 main 함수 내의 int 형 변수 a 의 주소를 받아서 자신의 int 주소형 변수 a 에 저장하고, main 함수 내의 int 형 변수 b 의 주소를 받아서 자신의 int 주소형 변수 b 에 저장하고 있습니다. 이제 아래 동작이 돌아가겠죠. *a+=*b => 간단히 말해서, a 라는 주소가 가르키는 위치에 있는 값에 b 라는 주소가 가르키는 위치에 있는 값을 더해주란 얘깁니다. += 연산자니까, a 가 가르키는 자리에 다시 그 값을 저장하는 겁니다. ( 즉, main 함수의 int 형 변수 a ) 아래에 *b=*a-*b*2 이것도 마찬가지로... 그래서 이건 main 함수의 int 형 변수 b 에다가 변화된 값을 저장하겠죠. 그래서 addmin 이 끝나고 a,b 를 main 함수에서 출력해 보면 a+b 와 a-b 가 나옵니다.
|