国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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語言指針初探的評論 (共 條)

分享到微博請遵守國家法律
绩溪县| 会泽县| 额敏县| 永丰县| 潜江市| 石棉县| 贡嘎县| 博白县| 巴青县| 吉隆县| 西安市| 深泽县| 孟村| 贵德县| 彭阳县| 海晏县| 迁安市| 繁昌县| 启东市| 土默特右旗| 阳泉市| 西吉县| 北辰区| 石林| 腾冲县| 赤壁市| 繁昌县| 奉新县| 长治市| 冀州市| 芒康县| 新蔡县| 友谊县| 搜索| 罗江县| 大丰市| 高雄市| 天门市| 镇平县| 新宾| 天长市|