[C++] 함수 호출 시 인수 전달 방식

2020. 6. 13. 15:00·Computer Science/Programming Language

함수가 외부로부터 매개 변수를 통하여 데이터를 받는 방법(함수 호출 시 인수 전달 방식)

(1) 값에 의한 호출(call by value)

(2) 참조에 의한 호출(call by reference)

 

값에 의한 호출 (= 복사본 전달)

"복사본 전달"인 이유: 복사본을 아무리 바꿔도 원본이 바뀌지 않음

 

#include <iostream>
using namespace std;

void swap(int x, int y);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	swap(a, b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	return 0;
}

void swap(int x, int y) {
	int tmp;
	tmp = x;
	x = y;
	y = tmp;

}

 

위의 코드를 보면

호출 전과 호출 후의 a, b값이 동일하게 나옴

- 함수로 변수의 값만 전달되기때문에 원본 변수 자체를 변경할 수 없음

 

참조에 의한 호출

- 전역변수를 사용하지 않고 함수 외부의 변수들을 참조하여 변경 가능하기 때문에 사용

 

참조에 의한 호출 사용 방법

(1) pointer(포인터) 사용

(2) reference(참조자) 사용

 

참조에 의한 호출 - pointer 

- 함수가 포인터를 통하여 변수의 주소를 받을 경우, 함수는 그 주소에 위치한 변수의 값 변경 가능

#include <iostream>
using namespace std;

void swap(int* px, int* py);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;	//(100,200)

	swap(&a, &b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;	//(200,100)

	return 0;
}

void swap(int* px, int* py) {
	int tmp;
	tmp = *px;
	*px = *py;
	*py = tmp;

}

 

- 함수 호출시 인수가 a,b가 아닌 &a,&b 이어야함(값이 아닌 변수의 주소 전달)

 

참조에 의한 호출 - reference

- 함수의 매개변수를 참조자로 선언하게 되면 호출된 함수에서는 이 참조자를 이용하여 원본 변수의 값 수정할 수 있음

#include <iostream>
using namespace std;

void swap(int &rx, int &ry);

int main() {
	int a = 100, b = 200;
	cout << "swap 호출 전 (a,b) : (" << a << "," << b << ")" << endl;

	swap(a, b);
	cout << "swap 호출 후 (a,b) : (" << a << "," << b << ")" << endl;

	return 0;
}

void swap(int &rx, int &ry) {
	int tmp;
	tmp = rx;
	rx = ry;
	ry = tmp;

}

 

- 위의 코드에서 swap( )함수의 정의를 보면, 매개변수 rx,ry가 참조자로 선언되어 있음

- main()에서 swap()를 호출할 때는 변수a,b가 swap()의 인수로 전달함

- 포인터보다 사용하기 편리함

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[C++] 접근자와 설정자  (0) 2020.06.14
[C++] 객체의 동적 생성  (0) 2020.06.14
[C++] 참조자(reference)  (0) 2020.06.13
[C/C++] 동적 메모리 할당(dynamic memory allocation)  (0) 2020.06.12
[C/C++] 변수 (지역변수, 전역변수)  (0) 2020.06.10
'Computer Science/Programming Language' 카테고리의 다른 글
  • [C++] 접근자와 설정자
  • [C++] 객체의 동적 생성
  • [C++] 참조자(reference)
  • [C/C++] 동적 메모리 할당(dynamic memory allocation)
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    해시
    오블완
    leetcode
    티스토리챌린지
    mysql error
    런타임 에러
    cmd error
    LNK2001
    c++error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[C++] 함수 호출 시 인수 전달 방식
상단으로

티스토리툴바