【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)推薦
C語言中指針數(shù)組和數(shù)組指針的區(qū)別
從編譯器角度分析C語言中數(shù)組名和指針的區(qū)別
C語言入門教學之數(shù)組資料總結(jié)免費下載
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教學之<b class='flag-5'>數(shù)組</b>資料總結(jié)免費下載](https://file.elecfans.com/web1/M00/69/07/pIYBAFvO-LmATNgXAADL3HGyt0E690.png)
C語言中指針與數(shù)組
![<b class='flag-5'>C</b><b class='flag-5'>語言中指針</b>與<b class='flag-5'>數(shù)組</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【C語言進階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?
C語言中的char數(shù)組和char指針有什么區(qū)別?
C語言數(shù)組元素的指針
C語言中什么是指針數(shù)組
C++數(shù)組名和數(shù)組拷貝詳解
![<b class='flag-5'>C</b>++<b class='flag-5'>數(shù)組名</b>和<b class='flag-5'>數(shù)組</b>拷貝詳解](https://file1.elecfans.com/web2/M00/94/1B/wKgaomTjDXuATjkeAABlGMQ0SvA013.jpg)
評論