色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

C語言中的sizeof關鍵字能夠計算數組長度嗎

劉姿婷2年前20瀏覽0評論

C語言中的sizeof關鍵字能夠計算數組長度嗎?

謝邀。

在C語言程序開發中,sizeof() 是一個常用,也是一個非常有用的關鍵字,程序員常常使用它來獲取變量占用內存的字節數。

稱 sizeof() 為“關鍵字”,是因為雖然 sizeof() 使用起來很像一個函數,但是它與函數還是有很大區別的,這一點我之前的文章討論過。

小技巧:避免“硬解碼”造成的代碼維護困難

例如下面這樣的例子,請看相關C語言代碼如下:

size 就等于 x 在內存中占用的字節數。在固定的機器平臺,變量 x 是 float 類型,占用的內存字節數是固定的,例如 float 類型在 pc 上常占用 4 字節內存空間。

之所以不直接使用 4,而是使用 sizeof(x) 是為了方便以后的維護??梢韵胂?,若以后發現 x 需要使用更長的數據類型 double 才能滿足需求,只需將 float x; 修改為 double x; 就可以了,size 會自己適應修改。

其實不僅C語言,在其他語言的程序開發中,都有這樣一個原則:盡可能的避免硬解碼出現,盡可能的避免重復功能出現,這樣才有利于后期的維護——萬一需要修改代碼,只需要修改一處。

sizeof() 獲取數組長度的“陷阱”

很多時候,利用 sizeof() 還可以獲取數組的長度,例如下面這兩行C語言代碼:

len 此時等于 128,也即數組 str 的長度。但是如果數組不是 char 型的,而是其他類型的,len 還等于數組長度嗎?編寫如下C語言程序:

編譯并執行這段C語言代碼,得到如下結果:

顯然,len 并不等于 arr 的長度 10,而是等于 40。很多C語言初學者看到這里會感到迷惑,怎么回事?sizeof(數組名)不是等于數組長度的嗎?

sizeof() 關鍵字從來就不是計算長度的關鍵字,而是獲取變量占內存空間字節數的關鍵字,這一點要謹記。str 是一個長度為 128 的 char 型數組,它占用內存字節數恰好等于 128,是因為 str 的每一個元素都是 char 型的,而 char 型占用一個字節的內存空間,因此此時 str 占用內存字節數和它的長度恰好是相等的。

再來看數組 arr,它的長度等于 10,但是它的每個元素都是 int 型的,而在我的機器上 int 型變量占用 4 字節內存空間,所以 arr 一共占用 40 字節內存空間,因此 sizeof(arr) 等于 40,而不是 10。

獲取數組長度的小技巧

現在知道 sizeof() 有時無法直接獲取數組長度的原因了,我們完全可以如下定義一個方法,用于計算數組長度,相關C語言代碼如下,請看:

sizeof(數組名)計算的是整個數組占用的內存字節數,而 sizeof(* x) 等價于 sizeof(x[0]),也即數組第一個元素占用的內存字節數。因為數組中各個元素的類型是相同的,所以 sizeof(* x) 也可以認為是每一個數組元素占用的內存字節數。上述宏定義就相當于:

數組長度 = 數組所有元素占用內存字節數 / 每個元素占用內存字節數

這么看來, arr_len 就不難理解了。編寫如下C語言程序測試一下 arr_len:

編譯并執行上面這段C語言程序,得到如下輸出:

顯然,arr_len 計算其他類型數組的長度也不在話下。

java求固定數組的長度,C語言中的sizeof關鍵字能夠計算數組長度嗎