English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 포인터와 함수

이 문서에서는 함수에 포인터를 파라미터로 전달하는 방법을 배우고 프로그램에서 효과적으로 사용하는 방법을 배울 것입니다.

에서C ++함수본문에서는 함수에 参数를 전달하는 방법에 대해 배웠습니다. 실제 값이 전달되었기 때문에 이 방법을 값 전달이라고 합니다.

하지만, 함수에 参数를 전달하는 또 다른 방법이 있습니다. 이 방법에서는 参数의 실제 값이 아닌 참조만을 전달합니다.

예제1:포인터 없는 참조 전달

#include <iostream>
using namespace std;
// 함수 원형
void swap(int&, int&);
int main()
{
    int a = 11, b = 22;
    cout << "교환 전" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(a, b);
    cout << "\n교환 후" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int& n1, int& n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

출력 결과

교환 전
a = 11
b = 22
교환 후
a = 22
b = 11

main() 함수에서, 두 개의 정수 변수 a와 b가 정의되었습니다. 이 정수는 swap() 함수에 참조로 전달됩니다.

컴파일러는 함수 정의가 void swap(int& n로 되어 있기 때문에 이를 참조로 전달된 것을识별할 수 있습니다.1, int& n2) 데이터 타입 뒤에 주의하세요.&기호)。

swap() 함수는 변수 a와 b의 참조(주소)만을 받아들이며, 교환은 변수의 원래 주소에서 발생합니다.

swap() 함수에서, n1와 n2형식 파라미터로서 실제로는 변수 a와 b와 동일합니다.

그리고 또 다른 사용 방법이 있습니다.포인터동일한 작업을 수행하는 방법.

예제2:참조를 통한 사용

#include <iostream>
using namespace std;
// 함수 원형
void swap(int*, int*);
int main()
{
    int a = 1, b = 2;
    cout << "교환 전" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(&a, &b);
    cout << "\n교환 후" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

이 예제의 출력은 이전 출력 결과와 동일합니다.

이 경우, 변수의 주소는 함수 호출 중에 전달되며, 변수 자체가 아닙니다.

swap(&a, &b); // &a는 a의 주소이고, &b는 b의 주소입니다

전달된 것이 값이 아니라 주소이기 때문에, 저장된 주소에 대한 값을 접근하기 위해 해제 연산자를 사용해야 합니다.

void swap(int* n1, int* n2) { 
 ... .. ...
}

* n1와* n2각각 주소 n에 저장된 값을 제공합니다.1와 n2위치의 값.

n1a의 주소를 포함하고 있기 때문에, 다음과 같은 주소에 대한 값을 변경합니다.* n1main() 함수에서 a의 값을 변경하는 모든 작업도 변경됩니다. 마찬가지로, b는 다음과 같은 값을 가집니다.* n2같은 값.