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

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

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

C語言的sizeof操作符基礎和經(jīng)典問題

汽車玩家 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-04-04 17:39 ? 次閱讀

sizeof基礎

C語言中,sizeof是一個操作符(operator),而不是函數(shù)!其用于判斷數(shù)據(jù)類型或者表達式長度(所占的內(nèi)存字節(jié)數(shù))。其有兩種表達形式:

(1)sizeof(類型說明符)

(2)sizeof 表達式

我們通常使用第(1)種形式。

其返回值類型為size_t,在頭文件stddef.h中定義。這是一個依賴于編譯系統(tǒng)的值,一般定義為:

typedef unsigned int size_t;

首先確定我們當前編譯環(huán)境中C語言各個基本數(shù)據(jù)類型在內(nèi)存中所占字節(jié)數(shù),我這里是32bit編譯環(huán)境:

C語言的sizeof操作符基礎和經(jīng)典問題

我們這里的輸出結果為:

C語言的sizeof操作符基礎和經(jīng)典問題

sizeof典型問題

sizeof看起來似乎很簡單,那來看看下面這段代碼,你能做對幾個:

C語言的sizeof操作符基礎和經(jīng)典問題

實際運行 輸出結果為:

C語言的sizeof操作符基礎和經(jīng)典問題

簡要分析:

(1)sizeof(char) 的值為1。因為char類型數(shù)據(jù)在內(nèi)存中占1字節(jié)。

(2)sizeof(char*)的值為4。因為char*代表一個指針,在32bit環(huán)境中為4字節(jié),也即unsigned int的字節(jié)長度。

(3)sizeof('a')的值為4。因為此處‘a(chǎn)’是獨立存在的一個字符(沒有賦值給其它變量),實際上就是一個整型數(shù),占4個字節(jié),即此處‘a(chǎn)’對應的ascii碼的十進制為整數(shù)97。但是需要注意的是,若有如下定義:

char ch = 'a';

則此處ch的字節(jié)數(shù)sizeof(ch)的值為1,而不是4。

(4)sizeof(*s+0)的值為4,因為'h'+0 轉化為int,占4字節(jié)。此處涉及到類型轉換的問題。即不同類型的數(shù)據(jù)進行運算時,會首先轉換成相同數(shù)據(jù)類型。轉換規(guī)則為(圖片來源于網(wǎng)絡):

C語言的sizeof操作符基礎和經(jīng)典問題

(5)sizeof(*s)的值為1,因為此處*s為字符串s的第1個字符‘h’(注意與第三點區(qū)分開來,這里是有用char來修飾的),所以所占字節(jié)長度為1。

(6)sizeof(s)的值為4,同(2),此處s是一個指針,在32bit環(huán)境中為4字節(jié),也即unsigned int的字節(jié)長度。

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

    關注

    8

    文章

    2945

    瀏覽量

    73729
  • C語言
    +關注

    關注

    180

    文章

    7581

    瀏覽量

    135570
收藏 人收藏

    評論

    相關推薦

    技術干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析運算與優(yōu)先級

    C語言的學習過程中,運算的使用是不可忽視的重要環(huán)節(jié)。本文將繼續(xù)深入探討C語言中的運算,重點
    的頭像 發(fā)表于 10-13 08:09 ?125次閱讀
    技術干貨驛站 ▏解鎖<b class='flag-5'>C</b><b class='flag-5'>語言</b>高效編程秘訣:深入解析運算<b class='flag-5'>符</b>與優(yōu)先級

    技術干貨驛站 ▏深入理解C語言:編程高手必備,全方位解析運算的核心技能!

    C語言的編程領域中,運算是實現(xiàn)數(shù)據(jù)處理與邏輯操作的關鍵工具。無論是在處理簡單的數(shù)值計算,還是在構建復雜的邏輯結構時,運算的使用貫穿始終
    的頭像 發(fā)表于 09-18 15:56 ?255次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:編程高手必備,全方位解析運算<b class='flag-5'>符</b>的核心技能!

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續(xù)出現(xiàn)時,它們?nèi)绾闻c操作數(shù)結合的順序。對于大多數(shù)二元
    的頭像 發(fā)表于 08-20 11:42 ?491次閱讀

    c語言從右到左的運算有哪些

    以下是一些主要的從右到左運算的C語言運算: 函數(shù)調(diào)用運算 ( () ):當您調(diào)用一個函數(shù)時,參數(shù)列表是從右到左進行求值的。 后置遞增運算
    的頭像 發(fā)表于 08-20 11:39 ?485次閱讀

    “+”操作符的使用技巧

    這篇寫個平時易被忽略的小知識點,一元 + 操作符的使用技巧。
    的頭像 發(fā)表于 12-28 13:27 ?463次閱讀

    sql語句where條件查詢

    的細節(jié),包括使用的操作符、條件的組合、多張表的查詢、條件的性能優(yōu)化等方面。 首先,讓我們了解一下WHERE子句中常用的操作符。在SQL中,常用的操作符包括: 比較操作符: 等于(=):
    的頭像 發(fā)表于 11-23 11:28 ?1014次閱讀

    178個經(jīng)典c語言源代碼+算法大全

    電子發(fā)燒友網(wǎng)站提供《178個經(jīng)典c語言源代碼+算法大全.rar》資料免費下載
    發(fā)表于 11-21 10:19 ?6次下載
    178個<b class='flag-5'>經(jīng)典</b><b class='flag-5'>c</b><b class='flag-5'>語言</b>源代碼+算法大全

    c語言經(jīng)典教程

    電子發(fā)燒友網(wǎng)站提供《c語言經(jīng)典教程.rar》資料免費下載
    發(fā)表于 11-20 11:45 ?6次下載
    <b class='flag-5'>c</b><b class='flag-5'>語言</b><b class='flag-5'>經(jīng)典</b>教程

    C語言經(jīng)典編程900例

    電子發(fā)燒友網(wǎng)站提供《C語言經(jīng)典編程900例.rar》資料免費下載
    發(fā)表于 11-20 11:40 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>經(jīng)典</b>編程900例

    C語言求數(shù)組長度的5種方法

    1,使用sizeof運算#includeintmain(){intarray[]={1,2,3,4,5};unsignedcharlength=sizeof(array)/sizeof
    的頭像 發(fā)表于 11-19 08:00 ?2510次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>求數(shù)組長度的5種方法

    C語言教程及經(jīng)典程序

    電子發(fā)燒友網(wǎng)站提供《C語言教程及經(jīng)典程序.rar》資料免費下載
    發(fā)表于 11-18 10:37 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程及<b class='flag-5'>經(jīng)典</b>程序

    Verilog基礎:介紹幾個常用的按位操作符

    操作符是對二進制位進行操作的運算。以下是一些常用的位操作符
    的頭像 發(fā)表于 11-09 10:59 ?1499次閱讀

    Verilog基礎:幾個常用的按位操作符

    操作符是對二進制位進行操作的運算。
    的頭像 發(fā)表于 11-09 10:57 ?1229次閱讀

    請問C語言文件中的預處理操作符#和##各有什么作用?

    C語言文件中的預處理操作符#和##各有什么作用?
    發(fā)表于 11-06 08:09

    C語言運算的使用方法

    詳細介紹了C語言表達式、算術運算、賦值運算、關系運算、條件結構、邏輯運算、位運算
    發(fā)表于 11-02 11:30 ?1220次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>運算<b class='flag-5'>符</b>的使用方法