第一個問題的答案,你已經得到了。
對於第二個問題,考慮三個變量,A,B,C,其中A & C是整數變量,B是整數指針。圖片中顯示了變量名稱,它們的值和地址(假設看到一個內存映射) 。
看到這個代碼
void fun(int *b,int *c)
{
printf("\nfun %d",*b);
b=c;
}
void fun1(int **b, int *c)
{
printf("\nfun1 %d",**b);
*b=c;
}
int main()
{
int a=10;
int c=200;
int *b=&a;
printf("\n %d %d %d",a,*b,c);
fun(b,&c);
printf("\n %d %d %d",a,*b,c);
fun1(&b,&c);
printf("\n %d %d %d",a,*b,c);
return 0;
}
在main()
,一個& c是本地整數變量,具有不同數據和b是整數指針。我們調用函數fun()
這樣,
fun(b,&c);
因爲,B是一個指針的話,我們是傳遞的(1000)b即地址的值。 因此,如果我們修改函數fun()
中的b,則該更改將僅反映在fun()
的內部。
現在我們調用函數fun1()
,
fun1(&b,&c)
在這裏,我們傳遞b即(3000)的地址。所以,當我們修改fun1()
中的b時,我們也會在main()
中看到反射。
所以,按值傳遞意味着,我們希望使用值而不修改存在於調用函數(main()
)中的原始指針。但我們通過參考,當我們需要任何重大變化,應該反映在我們的調用函數(main()
)本身。
我希望,這清除了懷疑。
嗯......兩者都在這裏傳遞指針(「引用」)。你可以改變它們指向的東西('int'或'struct'),但是用雙指針,你不能改變它們指向的地方。所以你的第二個問題是無意義的。你的第一個問題基本上誤解了' - >'的用途,即在一個運算符中取消引用和查找屬性。你總是可以做'(* head).data = 6;'如果你想看到'*'進行解引用。 – ShadowRanger
@ShadowRanger你的意思是 - *但是用雙指針,你可以**改變他們指向的位置*? –
@AjayBrahmakshatriya:哎呀。很確定我的意思是鍵入*,但**沒有**雙指針... *。同樣的想法。 – ShadowRanger