【C語(yǔ)言進(jìn)階】數(shù)組名和指針使用sizeof有什么不同?
本文介紹一個(gè)比較常見的錯(cuò)誤,是跟sizeof有關(guān)的,不知你是否有掌握呢?
1 問題說(shuō)明
大家都知道在C語(yǔ)言中,我們會(huì)使用sizeof來(lái)求一個(gè)變量的實(shí)際內(nèi)存長(zhǎng)度,那么如果是對(duì)數(shù)組名求sizeof,以及對(duì)一個(gè)指針求sizeof,它的結(jié)果有何不一樣呢?
2 示例代碼
為此,簡(jiǎn)單寫了一段測(cè)試代碼:
?
#include
?
int main(int argc, const char *argv[])
{
int a[10];
int *p = &a;
?
printf("sizeof(a) = %d\\n", sizeof(a));
?
printf("sizeof(p) = %d\\n", sizeof(p));
return 0;
}
3 代碼解讀
代碼其實(shí)很簡(jiǎn)單,先是定義了一個(gè)10個(gè)元素的整型數(shù)組,然后定義了一個(gè)指向整型類型的指針,并將指針指向數(shù)組a。
隨后對(duì)a和p,分別使用sizeof來(lái)求大小。
我們來(lái)看一下運(yùn)行結(jié)果:
從運(yùn)行結(jié)果,我們可以知道,兩者是完全不一樣的。
sizeof(a),是求a數(shù)組的內(nèi)存大小,理論上應(yīng)該等于:10 乘以 一個(gè)整形數(shù)所占空間 = 40 字節(jié);
而如果對(duì)指針p求sizeof,它用于等于運(yùn)行機(jī)器上的指針大小,比如在32位機(jī)器上,這個(gè)值就是4字節(jié);而我的測(cè)試機(jī)器是64位機(jī)器,所以其值為8字節(jié)。
4 總結(jié)
sizeof求數(shù)組和指針是兩個(gè)不同的操作,對(duì)數(shù)組它是求數(shù)組的整體內(nèi)存大小,而對(duì)指針,其值用于等于機(jī)器的字長(zhǎng)(即不同的機(jī)器有不同的測(cè)試結(jié)果)。
這個(gè)易犯錯(cuò)的知識(shí)點(diǎn),你get到了嗎?
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136695 -
編程
+關(guān)注
關(guān)注
88文章
3614瀏覽量
93686 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70551 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25939 -
sizeof
+關(guān)注
關(guān)注
0文章
9瀏覽量
6439
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論