在本教程中,您將借助示例學(xué)習(xí)將地址作為參數(shù)傳遞給函數(shù)。此技術(shù)稱(chēng)為“引用調(diào)用”。
在C語(yǔ)言編程中,也可以將地址作為參數(shù)傳遞給函數(shù)。
要在函數(shù)定義中接受這些地址,我們可以使用指針。這是因?yàn)橹羔樣糜诖鎯?chǔ)地址。讓我們舉個(gè)實(shí)例:
#include <stdio.h> void swap(int *n1, int *n2); int main() { int num1 = 5, num2 = 10; //傳遞num1和num2的地址 swap( &num1, &num2); printf("num1 = %d\n", num1); printf("num2 = %d", num2); return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; }
運(yùn)行該程序時(shí),輸出為:
num1 = 10 num2 = 5
使用swap(&num1, &num2);將num1和num2的地址傳遞給swap()函數(shù)。
指針n1和n2接受函數(shù)定義中的這些參數(shù)。
void swap(int* n1, int* n2) { ... .. }
當(dāng)swap()函數(shù)中的*n1和*n2發(fā)生變化時(shí),main()函數(shù)中的num1和num2也會(huì)發(fā)生變化。
在swap()函數(shù)內(nèi)部,* n1和* n2被交換。 因此,num1和num2也被交換。
注意,swap()不返回任何東西。 其返回類(lèi)型為void。
該方式在C語(yǔ)言編程中稱(chēng)為“引用調(diào)用”。
#include <stdio.h> void addOne(int* ptr) { (*ptr)++; //在*ptr上加1 } int main() { int* p, i = 10; p = &i; addOne(p); printf("%d", *p); // 11 return 0; }
這里,存儲(chǔ)在*p值最初為10。
然后我們將指針p傳遞給addOne()函數(shù)。ptr指針在addOne()函數(shù)中獲取這個(gè)地址。
在函數(shù)內(nèi)部,我們使用(*ptr)++;將存儲(chǔ)在ptr上的值增加1。因?yàn)閜tr和p指針都有相同的地址,所以main()中的*p也是11。