在本文中,您將學習將指針作為函數的參數傳遞,并在程序中有效地使用它。
在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& n1, int& n2)(請注意數據類型后的&符號)。
在swap()函數中僅接收變量a和b的引用(地址),并且交換發(fā)生在變量的原始地址中。
在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分別給出存儲在地址n1和n2處的值。
由于n1包含a的地址,因此對* n1所做的任何事情也會改變main()函數中a的值。 類似地,b將具有與* n2相同的值。