首页
/
每日頭條
/
生活
/
c語言sizeof運算符主要用于
c語言sizeof運算符主要用于
更新时间:2026-08-03 17:36:50

在上節内容中,我們使用符号常量解決了數組元素個數可維護性的額外負擔。然而數組有一種不指定元素個數的形态,通常是用于有固定元素個數的數據,這種情況下很少為其單獨定義符号常量。如果要用循環遍曆數組或非要為其定義符号常量,那可以通過數數的方式來進行。

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)1

假定你采取了數數的方式,一旦增加或減少數組元素個數,與該數組有關的流程就存在發生BUG的可能性。很明顯這可以采用更合理的方式解決,這便是sizeof。

sizeof運算符

在C語言中,一個char類型的變量占用一個字節的存儲空間,那int類型與float類型呢?這可以通過使用sizeof運算符來測量。

使用sizeof運算符時,需要提供變量或類型參數(如果是表達式,則按表達式結果的類型計算),返回該變量或類型以byte為單位所占用的空間大小。

  • 如果是實參是類型,那麼sizeof得到的結果是此類型的大小;
  • 如是實參是變量,那麼sizeof得到的結果是此變量的類型的大小,這個值永遠會比0大。

這裡有兩點需要注意:

  1. sizeof是運算符而不是函數。
  2. 不管傳遞給sizeof是的變量還是類型,最終計算的是類型占據的大小。

因此測試一個int類型變量的大小與測試int類型自身得到的結果是一緻的,這裡的程序顯示了在32位環境下,我們學習的已知變量類型的大小。

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)2

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)3

測試數組

關于sizeof需要牢記的便是:不管傳遞給sizeof是的變量還是類型,最終計算的是類型占據的大小。因此我們将一個數組對象傳遞給sizeof運算符,它便會計算出整個數組元素所占用的字節數。

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)4

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)5

根據第一個程序的結果我們知道sizeof(int)=4,那麼這裡sizeof(a)=4(字節)*9(元素)=36個字節。同樣sizeof(c)=8。知道了數組對象的總大小,除以元素的類型,便是數組元素的個數,下面是程序運行結果。

需要注意在計算數組a的元素個數時,我們采用的表達式為:sizeof(a)/sizeof(int);而數組c則采用的是傳遞變量的形式sizeof(c)/sizeof(c[0])。使用第二種方式的優勢在于,當你改變數組類型時,則不必改變求值表達式。假設采用方式一,你現在将數組a由int型改為float型,那表達式需要相應的更改為:sizeof(a)/sizeof(float)。

搶答送分題

思考一下:在表達式sizeof(c)/sizeof(c[0])中,為什麼使用數組的第一個元素,而不是其它元素,使用其它元素行嗎?

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)6

隻要你使用的元素沒有越界,那麼使用數組哪個元素都是可行的。之所以使用0号元素,因為數組也存在隻有一個元素的情況,如果你使用sizeof(c[1]),就會在不經意間造成越界訪問。之所以能夠使用任何一個未越界的元素,另一個深層的原因是:數組是存放同一類型數據的集合,這在數組的特性中提到過,并且sizeof最終計算的是類型占據的大小,sizeof(c[0])與sizeof(c[5])都是測試sizeof(char)類型占用的空間。

确認數組類型

再次重申一下,不管傳遞給sizeof是的變量還是類型,最終計算的是類型占據的大小

以測試數組中的例子而言,sizeof遇到a之後,它知道a是一個含有9個int型數據的數組,c則是一個含有8個字符的char型數組。sizeof(a)事實上相當于測試sizeof(int[9]),sizeof(c)就是sizeof(char[8]),所以a的類型是int[9], c的類型是char[9]。你可以把下列代碼加入到程序中,會發現這兩種類型占用的存儲空間與我們程序表述的一緻。

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)7

當然,如果使用C ,我們可以很輕松的看到數據的真實類型。下列程序使用typeid取得變量的類型對象,并打印出類型名稱。

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)8

c語言sizeof運算符主要用于(C語言快速入門初識sizeof運算符)9

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
孔子不姓孔而是姓子
孔子不姓孔而是姓子
這個問題問得好,“老子”的名字有可能…,古人所指不隻是一個人的名字,有可能指幾個或一群人的名字。對于一些特殊故事,看透不說透,時不時也會發生。子的出現,在一個名字出現後,就常見了,這個名字是“君子”。說實話,今天極少人用子字來做為人的名字,...
2026-08-03
絕世高手4775章
絕世高手4775章
絕世高手4775章?1.閣樓的環境确實很差,陳揚盡量将其打理的井井有條這一天晚上,外面依然是風雪肆虐閣樓裡,沒有任何取暖工具,冰冷得像是冷櫃一樣好在陳揚如今氣血強大了起來,也不怕冷了這樣的冬天,對于以前的那個陳易來說,顯然是極其難熬的陳揚心...
2026-08-03
五月同等學力申碩考試内容
五月同等學力申碩考試内容
5月19日,今年的同等學力申碩考試就要開考了,已經報考的同學緊不緊張呢?其實,考試結束後,大家面臨的無非是2種結果:考過或不過。那麼,考不過怎麼辦?考過了又該如何?小編根據這2種情況,為大家準備了2種後續流程,希望可以幫助到大家。01申碩通...
2026-08-03
給爸爸的生日禮物畫
給爸爸的生日禮物畫
爸爸今年69歲了,按照我們農村的習俗,70歲的生日要到69歲辦的。不想太麻煩,就簡單的自己一家人做頓飯買個蛋糕慶祝一下。蛋糕妹妹一家買了,那我隻有買個禮物給爸了。這個簡單我想都沒想就去商場買了兩件衣服給他。老爸拿到就試了試,表示很喜歡。他真...
2026-08-03
我的門派鎖妖塔需要打嗎
我的門派鎖妖塔需要打嗎
我的門派鎖妖塔需要打嗎?在QQ仙靈羅刹塔中不同的門派起到的做用是不同的,下面小編就為大家詳細說明不同門派在QQ仙靈羅刹塔中的作用,我來為大家講解一下關于我的門派鎖妖塔需要打嗎?跟着小編一起來看一看吧!我的門派鎖妖塔需要打嗎在QQ仙靈羅刹塔中...
2026-08-03
Copyright 2023-2026 - www.tftnews.com All Rights Reserved