首页
/
每日頭條
/
生活
/
c語言sizeof運算符主要用于
c語言sizeof運算符主要用于
更新时间:2024-09-17 05:30:13

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

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
推荐阅读
無負壓供水設備有壓力嗎
無負壓供水設備有壓力嗎
無負壓設備是将該設備直接接在自來水管網上,通過壓力傳感器來檢測出口壓力,再将檢測值與設定相比較來計算出水泵需要加壓的數值,然後直接在自來水的原有壓力基礎上進行加壓供水,一般情況下是不需要蓄水池的。因此,無負壓供水設備的運行可以不必經過水箱這...
2024-09-17
麒麟送子的家常做法
麒麟送子的家常做法
麒麟送子的家常做法?魚肉洗淨,切長方形薄片,加入調味料腌約5分鐘,我來為大家科普一下關于麒麟送子的家常做法?下面希望有你要的答案,我們一起來看看吧!麒麟送子的家常做法魚肉洗淨,切長方形薄片,加入調味料腌約5分鐘。冬筍氽水片刻,盛出切片;冬菇...
2024-09-17
一年穩定賺百分之十的項目
一年穩定賺百分之十的項目
大家好,今天給大家分享一個正規的跑腿項目,适合任何人操作,一個任務單價4到6塊,和美團拍店差不多,但是價格是美團的雙倍,一個任務最多幾分鐘就搞定,拍幾張門店照片上傳就行。這個任務是58同城大平台搞出來的,可以放心的做,掃碼直達小程序進去以後...
2024-09-17
賊眉鼠眼是什麼心理
賊眉鼠眼是什麼心理
眉毛的變化豐富多彩,不同的眉毛,能傳達不同的心理活動。中國有許多用來描述人的心情和性格的關于眉的成語。比如說:眉開眼笑、眉飛色舞、橫眉豎目、愁眉苦臉、慈眉善目等,每一種眉毛動作都會表現出相應的情緒,真是“眉”态百出。眉毛的狀态所透露的心理信...
2024-09-17
自制最簡單的振蕩電路
自制最簡單的振蕩電路
例一,電子催眠器電路圖①圖①電子催眠器電路圖見圖①電路工作原理這個電路就是一個簡易的電子催眠器,接通電源後,揚聲器BP便能發出單調重複的“哒、哒”模拟雨滴聲響,幫助失眠的人盡快進入夢鄉。圖中三極管Ⅴ1、Ⅴ2結構一個最簡單的互補型超低頻振蕩器...
2024-09-17
Copyright 2023-2024 - www.tftnews.com All Rights Reserved