函數參數
函數參數有實參和形參之分。
實參,顧名思義就是實際參數。是函數調用時,實際傳入函數的值。
形參,就是形式參數。是函數定義或聲明時,提示需要傳入什麼樣的參數。形參的生命周期與該函數的使用相同,也就是說,函數結束時,釋放形參的記憶體。
example:
#include <stdio.h>
void fun(int data_2)//data_2為形參
{
}
int main()
{
int data=9;
fun(data_1);//data_1為實參,實際上是執行一次指派操作,也就是data_2=data_1
//注意data_2的改變與data_1的改變無關。
return 0;
}
接下來是重點!!
怎麼樣才能通過形參來改變實參的值呢?
大緻有三種方法
一,全局變量
二,傳指針
三,傳引用
上面的都不是重點
下面的才是
重點解釋---------函數傳指針的引用-----------
首先看函數傳指針
example:
#include <stdio.h>
void fun(int *p)
{
*p=1;
p=NULL;
}
int main()
{
int data=0;
int* p=&data;
fun(p);
printf("%d",(p==NULL));//輸出0
printf("%d",data);//輸出1
return 0;
}
上面的代碼挺簡單的,就是通過傳位址改變data的值,但是注意,p并沒用變成空指針,因為函數能夠通過位址找到在記憶體中的data,并可以對其進行操作,但是指針函數中的p是形參,與主函數中的p是兩碼事。但是兩個指針都指向同樣的位址。
下面改變代碼
#include <stdio.h>
void fun(int *&p1)
{
*p1=1;
p1=NULL;
}
int main()
{
int data=0;
int* p=&data;
fun(p);
printf("%d",(p==NULL));//輸出1
printf("%d",data);//輸出1
return 0;
}
改為傳指針的引用,即時int*&p,輸出結果就變了,因為此次傳遞是傳遞主函數中指針p的引用,也就是說主函數的指針p和函數中的指針p1是同一個指針,也指向同一個位址。也可以了解成傳參時,執行了p1=&p,在函數中改變p1中儲存的位址,也就改變了主函數中p儲存的位址。