반응형

 

call by referncecall by value 그리고 call by address

이것들은 무엇인가?

 데이터 전달 하는방식 이라고 생각하자.

 

언어들마다 기본적으로 사용하는 방식이 조금 다를수 있으니 조심하자.

 

 

call by value  

        값에 의한 호출

   

 

int plus(int _a){  _a++; }

값을 복사 생성하여 내부에 새로운 값의 _a를 생성하여 사용하는 방법

그럼으로 아래의 코드  return으로 값을 돌려주어 데이터를 다시 넘겨주는 경우가 많음

int plus(int _a){ return _a++; }

 

잘못하여 사용할경우 큰데이터값을 복사 생성하여 속도가 느려지며 크기가 커질수 있다.

 

 

---------------------------------------------------------------------------------

call by address 

         주소에 의한 호출

 

 

void swap_address(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}

이처럼 함수 안에서 포인터를 이용하여 주소값을 전달하여 사용한다.

값의 위치를 전달하기에 속도가 call by value(복사생성) 보다 빠르다.

수정했을경우 데이터가 바로 바뀔수 있기에 편리하지만 데이터를 직접 변경하기 때문에 위험할수 있다.

 

---------------------------------------------------------------------------------

call by reference

         참조에 의한 호출

 

 

call by reference는 c에서는 지원을 하지않는 방식이다. Address방식괴 매우 유사하다.

메모리 구조에 대해서 이해가 있으면 좋다

 

메모리 공간에 이름을 붙여서 공유하여 사용 한다.

void swap_reference(int &a,int &b){ 
int temp = a;
a = b; 
b = temp;
}

또는

int a =10;
int &ref = a;
ref = 20; //a=20;

처럼 사용할수있다

-------------------------------

정리

 

reference address 방식은 값 전체를 복사하지 않기 때문에 속도가 빠르고 메모리를 덜 사용한다.

 또한 장단점으로는 원래 값이 영향을 받기 때문에 편하지만 조심해야한다.

둘은 포인터 형식으로 전달 받는가 아닌가의 차이다. 

 

 

 

 

value는 복사하여 사용하기 때문에 값이 보존되어 안전하지만

데이터의 크기가 커지면 속도가 느려지고 데이터를 많이 사용한다.

 

예외로는 Python은 call by assignment라는 방식을 사용한다.

 

 

'언어 > C++' 카테고리의 다른 글

c++ std::function 사용하기  (0) 2023.01.10
함수 포인터! (Function Pointer)!  (0) 2021.07.13
인라인 함수(Inline Function)  (0) 2021.06.15
네임스페이스  (9) 2021.05.18
bit연산! 또는 bit Flag  (0) 2021.05.05

+ Recent posts