<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    淺談C語言里sizeof的用法,C語言sizeof詳解

    • 發布:C++培訓
    • 來源:資料庫
    • 時間:2017-09-28 16:37

    首先我想好好分析一下,最近我一直在筆試一直出現的題:sizeof

    sizeof,顧名思義,是描述一個數據類型的size的,也就是大小

    簡單地說,其作用就是返回一個對象或者類型所占的內存字節數。開始我還以為它是簡簡單單的一個函數而已,在了解后才發現,它的學問多著呢!

    首先,sizeof有三種語法形式,分別如下:

    1) sizeof( object ); // sizeof( 對象 );

    2) sizeof( type_name ); // sizeof( 類型 );

    3) sizeof object; // sizeof 對象;

    也就是說,不能寫成sizeof int;形式

    實際上,sizeof計算對象的大小也是轉換成對對象類型的計算,也就是說,同種類型的不同對象其sizeof值都是一致的。

    這里,對象可以進一步延伸至表達式,即sizeof可以對一個表達式求值,編譯器根據表達式的最終結果類型來確定大小,一般不會對表達式進行計算。如:

    sizeof(2);由于2是int數據類型,所以也相當于sizeof(int);

    再比如sizeof(2+2.11);由于2.11是double數據類型,所以也相當sizeof(double);

    sizeof也可以對一個函數調用求值,其結果就是函數返回數據類型的大小,這里就不做例子了。

    下面我們再來看一下基本數據類型的sizeof:

    32位操作系統里

    char:1個字節 short int:2個字節

    int:4個字節 unsigned int:4個字節

    float:4個字節 double:8個字節

    long:4個字節 unsigned long:4個字節

    long long:8個字節 *:4個字節

    64位操作系統里

    char:1個字節 short int:2個字節

    int:4個字節 unsigned int:4個字節

    float:4個字節 double:8個字節

    long:8個字節 unsigned long:8個字節

    long long:8個字節 *:8個字節

    數組的sizeof

    數組的sizeof等于數組所占用的內存字節數,如:

    char a1[]="abc"; 那么sizeof(a1)為4。因為

    字符串結尾還有一個NULL終止符

    int a2[3];那么結果sizeof(a2)為3*4為12,因為

    一個int的sizeof是4

    結構體的sizeof

    終于到了重頭戲啦!雖然惡補兩天還是沒看懂,但是還是得貼出來呀!太重要太難了!

    那么,sizeof(S1)等于多少呢?

    char占1個字節,int占4個字節,那么加起來就應該是5,對嗎?

    emmmm不對!不要灰心,我們好好琢磨下sizeof定義:對象或者數據類型占的內存字節數。

    觀察S1的內存,S1的地址為0x0012FF78,其數據內容如下:

    0012FF78:61 CC CC CC FF FF FF FF

    為什么中間會插入3個CC呢?

    這就是傳說中的字節對齊!

    計算機組成原理教導我們這樣有助于加快計算機的取數速度,否則就得多花指令周期了。為此,編譯器默認會對結構體進行處理(實際上其它地方的數據變量也是如此),讓寬度為2的基本數據類型(short等)都位于能被2整除的地址上,讓寬度為4的基本數據類型(int等)都位于能被4整除的地址上,以此類推。這樣,兩個數中間就可能需要加入填充字節,所以整個結構體的sizeof值就增長了。

    在上面的例子中,char占1位字節,但是該結構體最寬的字節數是int,占四個字節,所以寬度為1的char需自動補全到4的倍數上,所以最后sizeof(S1)就為8。

    怎么樣,這還是最基礎的結構體的sizeof呢!還有更復雜的結構體的sizeof需要我們去討論和研究,但是基于我還沒弄明白!所以接下來的學習任務就要我們一起去學習探討哦!

    ---------------------------------------------------------------------------------------------------

    好啦,恭喜你終于看到了這里,抵達了講故事環節。今天的故事關于我,也關于每一個你。

    故事的開始是一個男孩,玩玩樂樂的高中結束之后進入玩玩樂樂的大學,按部就班地學習,和一群志同道合的狐朋狗友心照不宣地過著生活。

    突然,面臨一個選擇的時候,他選擇了一個與身邊的人都截然不同的方向,就像是一路一起旅行的伙伴,突然之間只剩下了你一個人。

    而這個選擇,就是畢業后的方向。

    考研也許更難,但他只是更愿意直面當前。不斷地投出自己的簡歷,近乎轟炸般的筆試和面試。

    也許你以為他不行,也許你以為你自己不行。

    但是,就像這個男孩,贏得了這家數一數二公司的青睞一樣,每顆懷著希望的心,都會獲得幸運的垂青。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:提升C++技能的4種方法
    下一篇:C程序變量和C運算符的初步認識

    超全的C語言標識符知識

    C指針——指針類型轉換

    C指針——指針和結構類型的關系

    C指針——數組和指針的關系

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>