在本文中,您將學(xué)習(xí)將指針作為函數(shù)的參數(shù)傳遞,并在程序中有效地使用它。
在C ++函數(shù)文章中,您了解了有關(guān)將參數(shù)傳遞給函數(shù)的知識。因為傳遞了實際值,所以使用的此方法稱為按值傳遞。
但是,還有另一種方法可以將參數(shù)傳遞給一個函數(shù),在這種方法中不傳遞參數(shù)的實際值。相反,只傳遞對該值的引用。
#include <iostream> using namespace std; // 函數(shù)原型 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; }
輸出結(jié)果
交換之前 a = 11 b = 22 交換之后 a = 22 b = 11
在main()函數(shù)中,定義了兩個整數(shù)變量a和b。這些整數(shù)通過引用傳遞給swap()函數(shù)。
編譯器可以識別出這是通過引用傳遞的,因為函數(shù)定義是void swap(int& n1, int& n2)(請注意數(shù)據(jù)類型后的&符號)。
在swap()函數(shù)中僅接收變量a和b的引用(地址),并且交換發(fā)生在變量的原始地址中。
在swap()函數(shù)中,n1和n2是形式參數(shù),實際上分別與變量a和b相同。
還有另一種使用指針完成相同任務(wù)的方法。
#include <iostream> using namespace std; // 函數(shù)原型 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; }
此示例的輸出與之前的輸出結(jié)果相同。
在這種情況下,變量的地址是在函數(shù)調(diào)用期間傳遞的,而不是變量本身。
swap(&a, &b); // &a是a的地址,&b是b的地址
由于傳遞的是地址而不是值,因此必須使用解引用運算符來訪問存儲在該地址中的值。
void swap(int* n1, int* n2) { ... .. ... }
* n1和* n2分別給出存儲在地址n1和n2處的值。
由于n1包含a的地址,因此對* n1所做的任何事情也會改變main()函數(shù)中a的值。 類似地,b將具有與* n2相同的值。