日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言中, 有些时候数值名并不与指针等价.

發(fā)布時(shí)間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中, 有些时候数值名并不与指针等价. 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以前已經(jīng)都提過(guò)了, c語(yǔ)言中,數(shù)組名就是1個(gè)指向數(shù)組第1個(gè)元素地址的指針.
?????????? 如數(shù)組char a[] = "bcd";
?????????? 數(shù)組名a 就是指向數(shù)組a[]的第1個(gè)元素a[0]的地址
?????????? 所以*a==a[0]=='b'

????????? 當(dāng)我們定義1個(gè)新的指針p,并給它賦值時(shí):
?????????? p=a;

?????????? 一般來(lái)講我們認(rèn)為他們p與a是等價(jià)的
????????? 因?yàn)橥瑯佑? *p==p[0]='b'
????????? p[i]=a[i]


??? 但是有特殊情況, 要將數(shù)組名a看成1個(gè)特殊的指針.

???????? 例如函數(shù)sizeof , 這是取1個(gè)對(duì)象(變量or常量) 的內(nèi)存占用空間
? ??????? 舉個(gè)例子:
? ? ? ? ? 定個(gè)1個(gè)字符數(shù)組c:
????????? char c[]="abcdefghikjlmn";

???????? 那么sizeof(c) 得出的是數(shù)組c的所占內(nèi)存空間,也就是c所有元素占的長(zhǎng)度(包括最后的隱藏元素'\000').
???????? 所以
???????? sizeof(c) == 15 ? //因?yàn)閏是字符數(shù)組, 每1個(gè)字符占的長(zhǎng)度是1字節(jié)(byte)啦

???????? 跟著定義1個(gè)指針p,并賦值:
???????? p=c;
????????
???????? 而size(p) 是求p本身所占的內(nèi)存空間, 也就是1個(gè)內(nèi)存單位
? ? ? ?? sizeof(p) == 8? // 64位gcc, 32位gcc是4, 因?yàn)閷?duì)于每1個(gè)內(nèi)存單位來(lái)講,64位的內(nèi)存單位長(zhǎng)度是32位的一倍.

???????? 那么數(shù)組c 是不是容易都是特殊指針呢. 不是, 當(dāng)他作為1個(gè)參數(shù)被傳入時(shí), 系統(tǒng)會(huì)將這個(gè)參數(shù)轉(zhuǎn)為一般化指針:
?
???????? 例如我定義1個(gè)新函數(shù):
???????? long int getlen(char* a){
?????????????? return sizeof(a);
???????? }

???????? 執(zhí)行 getlen(c) 時(shí), 實(shí)際是也會(huì)執(zhí)行size(c), 但是因?yàn)檫@時(shí)數(shù)組名c作為參數(shù)已經(jīng)被轉(zhuǎn)為一般的函數(shù), 所以getlen函數(shù)里面的sizeof(c)求的是c指針本身所占的內(nèi)存空間, 也就是8啦.

見(jiàn)如下例子:




輸出:
?
下面這個(gè)是相同代碼在32位gcc環(huán)境下的輸出:
?

總結(jié)

以上是生活随笔為你收集整理的C语言中, 有些时候数值名并不与指针等价.的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。