0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

【C語言進階】數(shù)組名和指針使用sizeof有什么不同?

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-10-03 17:53 ? 次閱讀

C語言進階】數(shù)組名和指針使用sizeof有什么不同?

本文介紹一個比較常見的錯誤,是跟sizeof有關的,不知你是否有掌握呢?

1 問題說明

大家都知道在C語言中,我們會使用sizeof來求一個變量的實際內(nèi)存長度,那么如果是對數(shù)組名求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個元素的整型數(shù)組,然后定義了一個指向整型類型的指針,并將指針指向數(shù)組a。

隨后對a和p,分別使用sizeof來求大小。

我們來看一下運行結果:

image-20220930212558866

從運行結果,我們可以知道,兩者是完全不一樣的。

sizeof(a),是求a數(shù)組的內(nèi)存大小,理論上應該等于:10 乘以 一個整形數(shù)所占空間 = 40 字節(jié);

而如果對指針p求sizeof,它用于等于運行機器上的指針大小,比如在32位機器上,這個值就是4字節(jié);而我的測試機器是64位機器,所以其值為8字節(jié)。

4 總結

sizeof求數(shù)組和指針是兩個不同的操作,對數(shù)組它是求數(shù)組的整體內(nèi)存大小,而對指針,其值用于等于機器的字長(即不同的機器有不同的測試結果)。

這個易犯錯的知識點,你get到了嗎?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7575

    瀏覽量

    134094
  • 編程
    +關注

    關注

    88

    文章

    3521

    瀏覽量

    93271
  • 指針
    +關注

    關注

    1

    文章

    475

    瀏覽量

    70457
  • 數(shù)組
    +關注

    關注

    1

    文章

    411

    瀏覽量

    25821
  • sizeof
    +關注

    關注

    0

    文章

    9

    瀏覽量

    6427
收藏 人收藏

    評論

    相關推薦

    C語言數(shù)組名指針

    指針C/C++語言的特色,而數(shù)組名指針太多的相
    發(fā)表于 08-27 17:48 ?676次閱讀

    C語言中指針數(shù)組數(shù)組指針的區(qū)別

    指針數(shù)組之間存在著緊密的關系。在本文中,我們將探討指針數(shù)組的關系、指針算術和數(shù)組遍歷、多維
    發(fā)表于 08-17 15:29 ?363次閱讀

    從編譯器角度分析C語言數(shù)組名指針的區(qū)別

    數(shù)組名卻不可以,正如你可以騎走一輛自行車,但是不能騎走一棵樹。另外,C語言數(shù)組下標改寫成指針偏移量的根本原因是
    發(fā)表于 06-23 23:36

    C語言入門教程-用指針操作數(shù)組

    C語言入門教程 在C語言中,數(shù)組指針的關系十分密切。要想有效地使用
    發(fā)表于 07-29 12:18 ?1462次閱讀

    C語言入門教學之數(shù)組資料總結免費下載

    本文檔的主要內(nèi)容詳細介紹的是C語言入門教學之數(shù)組資料總結免費下載主要內(nèi)容包括了:1 一維數(shù)組的定義和一維數(shù)組元素的引用2 一維
    發(fā)表于 10-23 17:53 ?5次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教學之<b class='flag-5'>數(shù)組</b>資料總結免費下載

    指針數(shù)組都是C語言的精髓所在 兩者何聯(lián)系區(qū)別

    指針數(shù)組都是C語言的精髓所在,對于很多C程序員來說,如果你問這樣一個問題:數(shù)組
    的頭像 發(fā)表于 05-27 14:51 ?3857次閱讀
    <b class='flag-5'>指針</b>和<b class='flag-5'>數(shù)組</b>都是<b class='flag-5'>C</b><b class='flag-5'>語言</b>的精髓所在 兩者<b class='flag-5'>有</b>何聯(lián)系區(qū)別

    C語言中指針數(shù)組

    #define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //數(shù)組名arry表示數(shù)組首元素的地址*int p,temp;//可直接初始化定義指針
    發(fā)表于 01-13 13:11 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中指針</b>與<b class='flag-5'>數(shù)組</b>

    C語言指針數(shù)組的區(qū)別

    C語言教程中我們使用通過數(shù)組名通過偏移和指針偏移都可以遍歷數(shù)組,那么指針
    的頭像 發(fā)表于 07-18 16:29 ?1785次閱讀

    C語言進階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?

    C語言進階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?
    的頭像 發(fā)表于 08-31 13:21 ?1816次閱讀

    C語言進階C語言指針的高階用法

    C語言進階C語言指針的高階用法
    的頭像 發(fā)表于 08-31 13:24 ?2151次閱讀

    C語言中的char數(shù)組和char指針什么區(qū)別?

    讓我們通過下面的例子,來了解 C語言中字符數(shù)組和字符指針之間的區(qū)別。
    的頭像 發(fā)表于 01-29 16:35 ?2348次閱讀

    C語言數(shù)組元素的指針

    C語言調(diào)用函數(shù)時虛實結合的方法都是采用“值傳遞”方式,當用變量名作為函數(shù)參數(shù)時傳遞的是變量的值,當用數(shù)組名作為函數(shù)參數(shù)時。 由于數(shù)組名代表的是
    的頭像 發(fā)表于 03-10 14:45 ?752次閱讀

    C語言中什么是指針數(shù)組

    C語言中一個數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,
    的頭像 發(fā)表于 03-10 15:26 ?1565次閱讀

    C++數(shù)組名數(shù)組拷貝詳解

    C++數(shù)組間賦值不能直接通過數(shù)組名稱 randy = sesame進行,因為數(shù)組名并不是指針,大部分情況下,編譯器會隱式轉換為指向
    發(fā)表于 08-21 15:09 ?419次閱讀
    <b class='flag-5'>C</b>++<b class='flag-5'>數(shù)組名</b>和<b class='flag-5'>數(shù)組</b>拷貝詳解

    數(shù)組指針不能混用的情況

    指針的基本概念。數(shù)組是一組相同類型的元素的集合,而指針是一個變量,它存儲了一個地址,該地址指向內(nèi)存中的某個位置。在 C/C++ 中,
    的頭像 發(fā)表于 12-07 13:46 ?490次閱讀