오랜만의 C언어 포스팅이다.
공부는 꾸준하게 하고 있기는 한데, '이걸 블로그에 올려도 되나?' 로 고민하다가 고민할 바에 그냥 하나라도 더 기록하자는 마음에
작성하고자 한다.
포인터를 이용하여 함수 호출 방식 중 'Call-by-reference'를 이용한 함수 예제를 풀어보았다.
윤성우 저 '열혈 C 프로그래밍' 교재에 있는 문제 중 하나이다.
사실 C언어에는 'Call-by-reference'가 존재하지 않는다는 내용의 글을 어디선가 주워 읽은 적이 있다.
그 글 덕분에 이 부분을 공부하며 머릿속이 굉장히 복잡해졌다.
분명히 파라미터에서 주소값을 반환하는 & 연산자가 들어갈 뿐 아니라 함수 내에서도 주소값 참조 연산자인 *도 들어가지 않는가.
이쯤 되면 참조에 의한 호출도 맞지 않을까? 하는 고민이 든다.
혹시 이 부분에 대해 확실히 아시는 분들께서는 부디 도움을 주시기를 간절히 희망한다...(희망합니다...)
▶문제
세 변수에 저장된 값을 서로 뒤바꾸는 함수를 정의해보자. 예를 들어서 함수의 이름이 Swap3라 하면, 다음의 형태로 함수가 호출되어야 한다.
Swap3(&num1, &num2, &num3);
그리고 함수호출의 결과로 num1에 저장된 값은 num2에, num2에 저장된 값은 num3에, 그리고 num3에 저장된 값은 num1에 저장되어야 한다.
나는 다른 Swap 관련 함수 혹은 프로그램 예제 소스에서 본 것처럼 temp라는 임시변수를 만들어서 하나를 저장시켜 해결했다.
소스코드
#include <stdio.h> void Swap3(int *num1, int *num2, int *num3) { int temp = *num2; *num2 = *num1; *num1 = *num3; *num3 = temp; } int main() { int num1 = 10; int num2 = 20; int num3 = 30; printf("num1, num2, num3 : %d %d %d \n", num1, num2, num3); Swap3(&num1, &num2, &num3); printf("**After Swap3**\n"); printf("nun1, num2, num3 : %d %d %d \n", num1, num2, num3); return 0; }
'Study (etc) > C' 카테고리의 다른 글
[정렬]버블 정렬 (0) | 2019.02.03 |
---|---|
[포인터]함수의 인자로 배열 전달하기 (1) (0) | 2019.02.03 |
[배열]배열의 최솟값, 최댓값, 합 (0) | 2019.01.28 |
[반복문]continue, break의 활용 (0) | 2019.01.07 |
[반복문] 팩토리얼 (계승) 구하기 (0) | 2019.01.07 |