ganzigi
10
2021-11-25 22:57:56
2
102

c++ 이틀된 왕초보 void 함수 문의사항입니다!


안녕하세요 c++ 입문한 지 이틀 된 코린이입니다 call by value refence를 직접 구현해보고자 아래와 같이 코딩을 해보았는데요


  1. 제가 작성 한 것 처럼 void 함수를 2개 이상 정의해도 되나요?
  2. Callbyvalue 호출전: 1, 2 Callbyvalue 호출후: 1, 2 swap 호출전: 3, 4 swap 호출후: 4, 3 

상기와 같이 구현하려면 어디를 어떻게 수정하면 좋을까요?ㅠㅠ


#include <stdio.h>


void Exchange1(int a, int b)

{

int temp1;


temp1 = a;

a = b;

b = temp1;

}


void Exchange2(int* x, int* y)

{

int temp2;


temp2 = *x;

*x = *y;

*y = temp2;


int main()

{

int a, b, x, y;


a = 1;

b = 2;

x = 3;

y = 4;


printf("Call-by-value 호출전 : %d , %d\n", a, b);

Exchange1(a, b);


printf("Call-by-value 호출후 : %d , %d\n", a, b);


printf("swap 전 : %d %d\n", x, y);


Exchange2(x, y);


printf("swap 후 : %d %d\n", x, y);


return 0;

}



0
  • 답변 2

  • Hide_D
    832
    2021-11-25 23:44:19 작성 2021-11-25 23:44:58 수정됨

    void Exchange2(int* x, int* y) 를

    void Exchange2(int& x, int& y) 로 바꾸세요.

    이왕 C++이니까 pointer 대신 reference 써아죠.

  • Cyp
    402
    2021-11-26 19:49:57 작성 2021-11-26 19:52:40 수정됨

    C++ 의 *, & 연산자는 각각 두가지로 해석될 수 있음에 유의하세요

    위 코드의 문제는 Exchange2 함수에서 포인터형을 입력받게 설정해 두고 value 를 입력받은것이 문제입니다.

    포인터형을 매개변수로 넘기기 위해서는 레퍼런스 연산자(&) 를 사용하셔야 합니다.


    #include <stdio.h>
    
    
    
    void Exchange1(int a, int b)
    
    {
    	int temp1;
    
    
    
    	temp1 = a;
    
    	a = b;
    
    	b = temp1;
    
    }
    
    
    
    void Exchange2(int* x, int* y)
    
    {
    	int temp2;
    
    
    
    	temp2 = *x;
    
    	*x = *y;
    
    	*y = temp2;
    
    }
    
    
    int main()
    
    {
    	int a, b, x, y;
    
    
    
    	a = 1;
    
    	b = 2;
    
    	x = 3;
    
    	y = 4;
    
    
    
    	printf("Call-by-value 호출전 : %d , %d\n", a, b);
    
    	
    
    	Exchange1(a, b);
    
    
    
    	printf("Call-by-value 호출후 : %d , %d\n", a, b);
    
    
    
    	printf("swap 전 : %d %d\n", x, y);
    
    
    
    	Exchange2(&x, &y);
    
    
    
    	printf("swap 후 : %d %d\n", x, y);
    
    
    
    	return 0;
    
    }
  • 로그인을 하시면 답변을 등록할 수 있습니다.