最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

分享到微博請遵守國家法律
永和县| 定州市| 长海县| 芷江| 镇宁| 罗平县| 通辽市| 贵州省| 胶州市| 德清县| 尚志市| 行唐县| 乌鲁木齐市| 石首市| 五原县| 太仆寺旗| 民勤县| 垫江县| 桐柏县| 蒙城县| 普兰店市| 略阳县| 渑池县| 达拉特旗| 阜康市| 南丰县| 宝坻区| 博白县| 葫芦岛市| 天台县| 栖霞市| 互助| 登封市| 乐平市| 台中县| 莲花县| 宿州市| 大埔区| 含山县| 调兵山市| 武邑县|