[Schizo!, 2007. 12. 14. 01:37, study/programming]
#include <stdio.h> void o ( int r ) printf ("함수 안 =%d\n", *r ); /* return; */
printf ("함수 호출 전 = %d\n", r ); o ( r ); 하고 #include <stdio.h> void o ( int *r ) printf ("함수 안 =%d\n", *r ); /* return; */
printf ("함수 호출 전 = %d\n", r ); o ( &r );
또 return이란 어떤 녀석이며 어떻게 사용되지요???? 대충 void형에선 생략 되는것은 알구요.. main()함수에 뭐 데이터값을 넘겨주는것?? 머시기 는 대충그정도 까진 알겟는데 자세한건 잘.. 또 return이란 뭡니까 도대체 return 이 녀석이 절 엄청 괴롭혀요 아..;; 증말 여태까지 보지 못햇던 녀석이 갑자기 함수에 출현해가지고 막 대충 책에는 설명해놓고 도대체 return은 무엇이면 또 return은 언제 사용되고 또 return이 있어야 하는지를 안알려준다는거죠 일단 void형 함수는 return을 생략해도 됩니다 삐리리... ㅜ.ㅜ 아차차ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 위에 두 예제의 차이점은 무엇입니까?? 한개는 call by value방식이라는거고 그 밑에꺼는 call by reference라는데.. call by reference를 이해하기 전에 주소라는 개념을 또 이해 한다네요?? 주소는 또 무엇이죠??.. 책에는 뭐 메모리 딱 .. 칸같은거 나와서 설명하는데 부족한감이 없지안나 싶구요.. 또 *r 에서 *가 상징하는 의미는 무엇이죠?? 부탁합니다..;;ㅜㅜ 먼저 C언어에는 Call By Value 만이 존재합니다. 포인터를 사용하여 Call By Reference를 흉내내는 것입니다. 함수를 정의할때 매개변수를 같이 정의하지요... 위의 예에서는 함수 o에 매개변수가 하나 있는데 이것이 Call By Value에서는 int r, 즉 변수 r이 정수임을 표시하고 있죠. 다음 예에는 int *r, 즉 변수 r이 정수값의 기억장소 주소임을 나타내고 있습니다. C/C++에서 포인터는 매우 중요하고 강력한 기능을 가지고있습니다. 질문하신 내용으로 볼때 포인터에 대한 학습이 아직 다 끝나지 않으신듯 합니다만... 포인터와 관계된 연산자 두가지에 대해 먼저 설명을 드리면... 변수 앞에 &라는 연산자를 사용하면 해당변수의 주소를 얻어오게 되어 변수의 주소(기억장소번지)값을 결과로 받게 됩니다. 또 변수 앞에 *라는 연산자를 사용하면 해당변수가 주소라는 가정하에 해당주소에 있는 값에 접근할 수 있도록 하지요. 위 설명을 기준으로 한다면 두번째 예제는 주소값을 매개변수로 넘겨주어 해당 기억장소에 접근하여 값을 변경하도록 함으로써 호출된 main 함수에서 할당받은 r 변수를 수정할 수 있게 되는 것입니다. 즉, 엄밀히 이야기하면 주소를 값으로하는 Call By Value 인 것이죠. (이게 더 햇갈리나요??? 어찌 됐던 C언어에는 Call By Reference는 없습니다.) 주소값을 사용함으로써 Call By Reference 효과를 얻게 되는 것입니다. (아~~~ 설명하면서도 어렵다...) 마지막으로 return이라는 것에 대해 설명을 드리죠. return은 정의된 함수의 반환자료형에 따른 함수 처리결과를 호출한 함수로 되돌려주는 기능을 합니다. 위의 예는 함수 o에 대한 반환형이 void, 즉 반환되는 값이 없는 것으로 정의되어 있습니다. 따라서, 함수 마지막의 return은 있어도 되고 없어도 되는 것이죠... 그러나 반환형이 정수나, 실수, 자료형의 주소 등과 같이 특정한 값을 가져야 하는 경우에는 반드시 return 문장이 필요하게 됩니다. 그리고 함수 수행도중에 return을 만나게 되면 더이상 함수를 처리하지 않고 결과를 반환하고 호출된 함수로 복귀하게 됩니다. 도움이 되시길 바랍니다. 'study > programming' 카테고리의 다른 글
|
||||||||||||