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

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

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

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

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

sizeof基礎(chǔ)

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操作符基礎(chǔ)和經(jīng)典問題

我們這里的輸出結(jié)果為:

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

sizeof典型問題

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

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

實際運行 輸出結(jié)果為:

C語言的sizeof操作符基礎(chǔ)和經(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)’對應(yīng)的ascii碼的十進制為整數(shù)97。但是需要注意的是,若有如下定義:

char ch = 'a';

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

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

C語言的sizeof操作符基礎(chǔ)和經(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)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3081

    瀏覽量

    74605
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7618

    瀏覽量

    138707
收藏 人收藏

    評論

    相關(guān)推薦

    全套C語言培訓(xùn)資料—PPT課件

    全套C語言培訓(xùn)資料,共427頁,13個章節(jié):C語言概述、程序的靈魂—算法、數(shù)據(jù)類型 & 運算與表達式、順序程序設(shè)計、選擇結(jié)構(gòu)程序設(shè)
    發(fā)表于 03-12 14:50

    邏輯異或運算在Python中的用法

    在Python編程語言中,邏輯異或運算并不直接作為一個內(nèi)置的操作符存在,因為Python更側(cè)重于高級編程和可讀性,并沒有直接提供異或運算的簡寫形式用于邏輯運算(真/假值的異或)。然
    的頭像 發(fā)表于 11-19 09:46 ?432次閱讀

    C語言指針運算詳解

    C語言中,當你有一個指向數(shù)組中某個元素的指針時,你可以對該指針執(zhí)行某些算術(shù)運算,例如加法或減法。這些運算可以用來遍歷數(shù)組中的元素,如ptr[i]等價于*(ptr + i)。然而,如果你的操作使得指針指向了數(shù)組以外的位置(除了數(shù)
    的頭像 發(fā)表于 10-30 11:16 ?391次閱讀

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

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

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

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

    C語言指針詳細解析

    可以對數(shù)據(jù)本身,也可以對存儲數(shù)據(jù)的變量地址進行操作。 指針是一個占據(jù)存儲空間的實體在這一段空間起始位置的相對距離值。在C/C++語言中,指針一般被認為是指針變量,指針變量的內(nèi)容存儲的是
    發(fā)表于 09-14 10:03

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型整數(shù)類型

    (十進制)。 整數(shù)類型支持的操作 整數(shù)類型默認支持的操作符包括:算術(shù)操作符、位操作符、關(guān)系操作符、自增和自減
    發(fā)表于 09-13 14:55

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型布爾類型

    let b: Bool = false 布爾類型支持的操作 布爾類型支持的操作符包括:邏輯操作符(邏輯非!,邏輯與 &&,邏輯或 ||)、部分關(guān)系操作符
    發(fā)表于 09-09 09:57

    c語言中從左到右結(jié)合怎么看

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

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

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

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識倉頡開發(fā)語言

    復(fù)用和生態(tài)兼容。 領(lǐng)域易擴展 :倉頡編程語言提供了基于詞法宏的元編程能力,支持在編譯時變換代碼,此外,還提供了尾隨 lambda、屬性、操作符重載、部分關(guān)鍵字可省略等特性,開發(fā)者可由此深度定制
    發(fā)表于 08-15 10:00

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識倉頡開發(fā)語言

    復(fù)用和生態(tài)兼容。 領(lǐng)域易擴展 :倉頡編程語言提供了基于詞法宏的元編程能力,支持在編譯時變換代碼,此外,還提供了尾隨lambda、屬性、操作符重載、部分關(guān)鍵字可省略等特性,開發(fā)者可由此深度定制程序的語法
    發(fā)表于 07-30 17:49

    FPGA學(xué)習(xí)筆記---基本語法

    3、信號類型:wire, reg, tri等 4、參數(shù)定義:parameter 5、運算操作符:各種邏輯操作符、移位操作符、算數(shù)操作符等 6、比較判斷:if ... else, ca
    發(fā)表于 06-23 14:58

    淺析C語言中的變量修飾

    一、修飾類型51單片機采用哈佛結(jié)構(gòu)。內(nèi)存空間編址有重疊??梢栽诓煌偩€上定義不同的變量。在KEILC51中定義了data、idata、xdata、code幾種域修飾。這些修飾決定了變量訪問方式
    的頭像 發(fā)表于 04-15 08:10 ?939次閱讀
    淺析<b class='flag-5'>C</b><b class='flag-5'>語言</b>中的變量修飾<b class='flag-5'>符</b>

    C語言基礎(chǔ)-為什么要使用C?

    當今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng)) MySQL 都是使用 C 語言編寫的。
    發(fā)表于 03-25 11:20 ?547次閱讀