English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 함수에 포인터를 파라미터로 전달하는 방법을 배우고 프로그램에서 효과적으로 사용하는 방법을 배울 것입니다.
에서C ++함수본문에서는 함수에 参数를 전달하는 방법에 대해 배웠습니다. 실제 값이 전달되었기 때문에 이 방법을 값 전달이라고 합니다.
하지만, 함수에 参数를 전달하는 또 다른 방법이 있습니다. 이 방법에서는 参数의 실제 값이 아닌 참조만을 전달합니다.
#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와 동일합니다.
그리고 또 다른 사용 방법이 있습니다.포인터동일한 작업을 수행하는 방법.
#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같은 값.