首页
/
每日頭條
/
生活
/
c語言sizeof運算符主要用于
c語言sizeof運算符主要用于
更新时间:2025-12-06 11:30:19

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

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
推荐阅读
汽修班怎麼管理
汽修班怎麼管理
為什麼培訓不能真正解決汽修廠的困境随着消費者的認知變化及互聯網的深度介入,汽車後市場的競争日趨殘酷,很多的汽修企業進入到舉步維艱的狀态,為了擺脫這種困境,汽修行業的經營者開始主動或被動尋找學習機會。大多數的經營者采用的是參加各種形式的培訓,...
2025-12-06
成都水稻種植收益
成都水稻種植收益
夕陽下,飽滿的谷粒壓彎了稻杆,收割的、打谷的、脫殼的分頭忙碌……這番熱火朝天的秋收景象,并非遠郊田間專屬,最近出現在了張楊路上的一家購物中心。今年夏天,金橋國際商業廣場攜手生飛農場,帶領睦鄰學校的孩子們創新地将8個花壇改種水稻,深秋時節,這...
2025-12-06
牛油果吃多了會怎麼樣
牛油果吃多了會怎麼樣
牛油果吃多了會怎麼樣?牛油果吃多了除了因為太飽導緻消化不良之外沒有其他壞處,我來為大家科普一下關于牛油果吃多了會怎麼樣?下面希望有你要的答案,我們一起來看看吧!牛油果吃多了會怎麼樣牛油果吃多了除了因為太飽導緻消化不良之外沒有其他壞處。牛油果...
2025-12-06
張可盈為什麼會說粵語
張可盈為什麼會說粵語
本文編輯劇透社:伊文未經授權嚴禁轉載,發現抄襲者将進行全網投訴由張家輝、林峯、郭羨妮和唐甯等人主演的經典劇集《天涯俠醫》在每天的夜間十一點五十重播後,再一次掀起了深夜的追劇熱潮。不過,時間過的好快,《天涯俠醫》将在7月9日完結,根據TVB日...
2025-12-06
失信被執行人解除後還會有影響嗎
失信被執行人解除後還會有影響嗎
失信被執行人解除後還會有影響嗎?上海股權糾紛律師|上海股東糾紛律師|上海公司律師-知律網,下面我們就來聊聊關于失信被執行人解除後還會有影響嗎?接下來我們就一起去了解一下吧!失信被執行人解除後還會有影響嗎上海股權糾紛律師|上海股東糾紛律師|上...
2025-12-06
Copyright 2023-2025 - www.tftnews.com All Rights Reserved