无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C語言指針初探

2020-04-19 07:03 作者:e小白官方  | 我要投稿

注意:1.以下所有代碼及運(yùn)行結(jié)果均在VS2017編譯器下成功編譯和運(yùn)行。
? ? ? ? 2.文章里面的代碼筆者會省略#include<stdio.h>,int main()等,僅展示一部分代碼,以減少文章篇幅。

首先聲明一個整數(shù)和一個整數(shù)指針:
int i;
int *p;

單純地看這兩個家伙,你會覺得這兩個家伙長的好像。就是指針多了一個*號而已。既然長的像,那會不會有什么關(guān)聯(lián)呢?肯定是有關(guān)聯(lián)的,既然i是個變量,那么p也應(yīng)該是個變量,只不過變量i存的是個整數(shù)值,變量p存的是地址而已。一般情況下,我們不想用到變量p存的地址的時候,就可以用*號把變量p存的地址所對應(yīng)的值取出來。接下來,我們通過編程來看看:
int i;
int *p;
i=2;
p=&i;
printf("%p,%p,%d,%d\n", p,&i,*p,i);

運(yùn)行結(jié)果為:00BCFE88, 00BCFE88, 2,2
從以上代碼及運(yùn)行結(jié)果可以看出,指針p就是變量,只不過它存的是i地址,而我們不想要它存的地址的時候,就可以利用*號來把地址所對應(yīng)的數(shù)值給取出來。
這又帶給我們一個思考,既然指針p是變量,能不能對指針p取地址呢?接下來,我們通過編程來看看:
printf("%p,%p,%d,%d,%p\n", p,&i,*p,i,&p);
運(yùn)行結(jié)果為:003AF940, 003AF940, 2,2,003AF934(地址值每次編譯會不一樣)

通過這個,我們更能初步理解指針了。指針就是變量,它也有地址,只不過在它的這個地址下所存的東西,也是個地址。變量i也有地址,只不過在這個地址下所存的是一個數(shù)值而已。但是,指針p可以用*號把它存的地址所對應(yīng)的值給取出來。

我們可以這樣來理解:
p<-->&i
*p<-->i

接下來,讓我們又來看看一個不可思議的現(xiàn)象,通過編程:
printf("%d, %d, %d\n", sizeof(int*), sizeof(char*), sizeof(double*));


printf("%d, %d, %d\n", sizeof(int), sizeof(char), sizeof(double));
運(yùn)行結(jié)果為:4, 4, 4
? ? ? ? ? ? ? ? ? ? ? 4, 1, 8

int的大小為4字節(jié),char的大小為1字節(jié),double的大小為8字節(jié)(在筆者的編譯器及電腦運(yùn)行的情況下)。那為什么指針都是4個字節(jié)呢(在筆者的編譯器及電腦運(yùn)行的情況下)?這個我們可以這么理解,指針變量存放的是地址,我們可以看到上面打印出來的地址都是16進(jìn)制數(shù)且都只有8位,而每一位16進(jìn)制數(shù)代表著4位二進(jìn)制數(shù),因此一個地址就代表了32位二進(jìn)制數(shù),這不正好是4個字節(jié)嗎(一個字節(jié)由8個二進(jìn)制位組成)?換句話說,只需要4個字節(jié)就可以保存指針變量了。當(dāng)然,這要根據(jù)cpu,編譯器,操作系統(tǒng)而定。至少,在筆者的編譯器和電腦運(yùn)行下,不同類型的指針大小就是4個字節(jié)。

關(guān)于指針的一小部分知識,筆者就先介紹到這里。


C語言指針初探的評論 (共 條)

分享到微博請遵守國家法律
泽州县| 怀宁县| 始兴县| 津南区| 太保市| 灵璧县| 镇坪县| 曲沃县| 沧州市| 宁夏| 始兴县| 佛坪县| 凌源市| 寻甸| 武宣县| 淮滨县| 泗阳县| 唐山市| 中西区| 吴川市| 卢湾区| 托里县| 阳春市| 穆棱市| 柯坪县| 登封市| 平乡县| 色达县| 依兰县| 三穗县| 霍林郭勒市| 克什克腾旗| 琼海市| 牙克石市| 望谟县| 祥云县| 阿拉善左旗| 五华县| 宜兰市| 镇江市| 文山县|