復制函數參數,例如:
void修改(int a)
{
a++;
}
void main()
{
int a = 5;
修改(壹);
printf("%d ",a);
}
這個節目的答案還是5。為什麽?
因為調用modify(a)時,在執行modify函數時會打開另壹個內存空間,並復制main中A的值。修改函數中的所有操作都是相對於這個新打開的內存空間的,對原來的a沒有任何改變。
現在我們來談談指針。如果用指針傳遞參數,就完全不壹樣了。指針,說白了就是指變量的內存地址。類似地,上面的例子:
void modify(int * a)
{
(* a)++;
}
void main()
{
int a = 5;
修改(& ampa);
printf("%d ",a);
}
答案當然是6。
因為妳傳入的是A的地址,所以modify函數中的所有操作都是對A的地址的內容進行操作,也就是對A進行操作,所以modify函數不需要返回這個數,main中A的值也會發生變化。因為大家操作的是同壹個內存空間,而且上面沒有指針,所以modify操作的是另壹個新打開的內存空間,但是這個內存空間的初始值和a壹樣。
現在我們來談談傳遞參數。事實上,妳“為什麽函數參數是字符串的多用途指針?”我不太明白那句話。C中的字符串傳遞參數似乎只是指針的壹種形式(除非使用了結構)。
何時使用指針,何時使用副本。當傳遞的參數是壹個結構,並且這個結構比較大的時候,這個時候用指針比較好,因為如果使用復制的話,光是復制花費的時間就浪費了,如果頻繁調用這個函數,那麽這個效率問題就出現了。
當妳想在子函數中操作妳的主調用函數中的變量時,也可以使用指針作為參數,這樣子函數就可以不使用return。如果不使用指針,應該在子函數的末尾加壹個返回x。將該數字作為返回值返回。
多看書,多寫程序,壹開始會對指針很迷茫。寫多了自然就懂了。