프로그래밍 지식/C++

C++문법/ 함수 매개변수에서 * 과 &의 차이 ★★★★★

게임이 더 좋아 2021. 11. 30. 21:55
반응형
728x170

 

짧게 설명하겠다.

주석에 달아놓았다.

 

내가 써놓은 참조 변수에 대해 보고 가면 더 좋다.

[프로그래밍언어(Programming Language)/C || C++] - C++문법/ 참조 변수, reference + 참조의 특성

#include <iostream>

using namespace std;
int func(int* ptr); // -> 포인터를 매개변수로 받음
int func(int& a); // -> 변수를 매개변수로 받지만 결국 해당 변수의 참조임

int main() {

    int x = 3;

    int* px = &x;

    cout << x << " 수행전 값\n";
    cout << func(px) << "\n";
    cout << x << " 수행 후 값\n";
    cout << func(x) << "\n";
    cout << x << " 수행 후 값\n";

    return 0;
}

//주소를 매개변수로 받게됨
//함수 매개변수에서의 *의미 ->
int func(int* ptr) {
    *ptr = 4; // 해당 포인터가 가리키는 원본 값의 변경
    //원본 값을 바꾸고 싶을 때에는 ptr이 주소이므로 *(내용 참조 연산자)를 사용해서 값을 바꿔야함

    return *ptr;
}

//변수를 매개변수로 받게됨
//함수 매개변수에서의 &의미 -> 해당 변수의 주소를 전달함 -> 해당 함수에서 참조 변수가 됨
//즉, 아래에선 들어온 변수를 형식 매개변수 a를 초기화하는데 쓰는 것이다.
// int & a = (들어온 변수) -> 참조 변수 생성
int func(int& a) {
    a = 5; //해당 변수를 참조해서 원본 값의 변경 (참조 변수이므로 바로 사용가능)
    return a;
}

 

 

결과

 

 

위에 설명을 다 써놓았다.

함수를 만들 때

포인터로 받든지 

참조 변수로 받든지

원본을 변경할 수 있다.

 

결국 어떻게 이용할 것이냐의 차이다.

 

728x90
반응형
그리드형