【C語言進階】數(shù)組名和指針使用sizeof有什么不同?
本文介紹一個比較常見的錯誤,是跟sizeof有關(guān)的,不知你是否有掌握呢?
1 問題說明
大家都知道在C語言中,我們會使用sizeof來求一個變量的實際內(nèi)存長度,那么如果是對數(shù)組名求sizeof,以及對一個指針求sizeof,它的結(jié)果有何不一樣呢?
2 示例代碼
為此,簡單寫了一段測試代碼:
?
#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 代碼解讀
代碼其實很簡單,先是定義了一個10個元素的整型數(shù)組,然后定義了一個指向整型類型的指針,并將指針指向數(shù)組a。
隨后對a和p,分別使用sizeof來求大小。
我們來看一下運行結(jié)果:
從運行結(jié)果,我們可以知道,兩者是完全不一樣的。
sizeof(a),是求a數(shù)組的內(nèi)存大小,理論上應該等于:10 乘以 一個整形數(shù)所占空間 = 40 字節(jié);
而如果對指針p求sizeof,它用于等于運行機器上的指針大小,比如在32位機器上,這個值就是4字節(jié);而我的測試機器是64位機器,所以其值為8字節(jié)。
4 總結(jié)
sizeof求數(shù)組和指針是兩個不同的操作,對數(shù)組它是求數(shù)組的整體內(nèi)存大小,而對指針,其值用于等于機器的字長(即不同的機器有不同的測試結(jié)果)。
這個易犯錯的知識點,你get到了嗎?
-
C語言
+關(guān)注
關(guān)注
180文章
7613瀏覽量
137245 -
編程
+關(guān)注
關(guān)注
88文章
3633瀏覽量
93853 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70585 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25988 -
sizeof
+關(guān)注
關(guān)注
0文章
9瀏覽量
6440
發(fā)布評論請先 登錄
相關(guān)推薦
評論