함수의 호출방식

sz L·2023년 3월 22일
0

C++

목록 보기
7/40
post-thumbnail

함수의 호출방식

  • Call-By-Value
    • 값을 인자로 전달하는 함수의 호출방식
  • Call-By-Reference
    • 주소 값을 인자로 전달하는 함수의 호출방식

Call-By-Value

이 경우 메모리에 접근하는 방식이 아니라 함수 호출해도 값이 변하지 않음

#include <iostream>
using namespace std;

void swap(int num1, int num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;
}

int main()
{
	int val1 = 10;
	int val2 = 20;

	swap(val1, val2);
	cout << "val1 : " << val1 << endl;
	cout << "val2 : " << val2 << endl;

	return 0;
}


Call-By-Reference

  1. 참조자를 이용하는 방법
  2. 포인터를 이용하는 방법

참조자 이용

  • 함수 외부에 선언된 변수의 접근 가능
  • 포인터 연산을 할 필요가 없어 안정적임
  • 함수의 호출 형태 구분이 어렵다
  • 함수 호출 시 전달되는 인자로 참조자 초기화 됨
#include <iostream>
using namespace std;

void swap(int& ref1, int& ref2)
{
	int temp = ref1;
	ref1 = ref2;
	ref2 = temp;
}

int main()
{
	int val1 = 10;
	int val2 = 20;

	swap(val1, val2);
	cout << "val1 : " << val1 << endl;
	cout << "val2 : " << val2 << endl;

	return 0;
}

포인터 이용

  • 함수 외부에 선언된 변수의 접근 가능
  • 포인터 연산에 의해 가능함
  • 포인터 연산의 위험성 존재
#include <iostream>
using namespace std;

void swap(int* ref1, int* ref2)
{
	int temp = *ref1;
	*ref1 = *ref2;
	*ref2 = temp;
}

int main()
{
	int val1 = 10;
	int val2 = 20;

	swap(val1, val2);
	cout << "val1 : " << val1 << endl;
	cout << "val2 : " << val2 << endl;

	return 0;
}

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글