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