카테고리 없음

call-by-value / call-by-address / call-by-reference

zuyo 2019. 5. 9. 01:30
반응형

call-by-value

함수를 호출할 때 단순히 값을 전달하는 형태. (값의 복사)

값을 반환하지 않는 이상, 함수 안에서 파라미터로 받은 값에 변화가 일어나도 진짜 변수에 영향을 끼치지 않는다.

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

void main()
{
	int num1 = 10;
	int num2 = 20;

	swap(num1,num2);

	printf("num1:%d  num2:%d\n",num1,num2); // 값이 바뀌지 않는다.
}

call-by-address

메모리의 접근에 사용되는 주소 값을 전달하는 형태 (포인터 사용)

void swap(int* a, int* b) // 파라미터로 주소값을 받고, 함수 안에서는 주소가 가리키는 값을 바꾼다.
{
	int temp = *b;
	*b = *a;
	*a = temp;
};

void main()
{
	int num1 = 10;
	int num2 = 20;

	swap(&num1,&num2);

	printf("num1:%d  num2:%d\n",num1,num2);
}

call-by-reference

call by address와 비슷하다. 포인터가 아닌 참조자를 사용해서 변수에 직접 접근한다.

void SwapByRef2(int& ref1, int& ref2) // 변수에 직접 접근하여 값을 바꾼다.
{
	int temp = ref1;
	ref1 = ref2;
	ref2 = temp;
}
반응형