亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

C傳址調(diào)用,兩次修改*a的值,返回結(jié)果是第一個*a
巴扎黑
巴扎黑 2016-11-08 15:44:16
0
1
1267

這是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呢?


巴扎黑
巴扎黑

reply all(1)
phpcn_u29

在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)系了。所以只被賦值了第一次。

不知道這樣你懂了沒,我不善表達,見諒。


Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template