這是C代碼。
#include <stdio.h>void func(int *a){ *a = 2; int c = 3; int *b = &c; a = b; *a = 3; }void main(){ int a = 1; func(&a); printf("%d\n", a); }
運行結(jié)果是
2
為什么a的結(jié)果不是3呢?
在func函數(shù)中,你可以將int *a寫成int* a,這樣就一目了然了,a是形參。一開始,a的值是main函數(shù)里a的地址。這樣我們把func形參a換個名字,就叫做d吧。這樣整個函數(shù)就變成這樣了:
void?func(int*?d){ ????*d?=?2;???? ????int?c?=?3;????int*?b?=?&c; ????d?=?b; ???? ????*d?=?3; }
好了我們再來看。一開始d是a的地址。所以*d賦值就是給a賦值。但是,b是c的地址,d = b,d就變成c的地址了,那么給*d賦值就是給c賦值了,和a就沒有什么關(guān)系了。所以只被賦值了第一次。
不知道這樣你懂了沒,我不善表達,見諒。