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