C 之sizeof 知多少

2021-08-20 04:09:43 字數 1265 閱讀 5381

sizeof計算的是在棧中分配的記憶體大小。

1.sizeof的使用形式:sizeof(var_name)或者sizeof var_name。變數名可以不用括號括住:sizeof a;資料型別必須用括號括起來:sizeof(int)。

2.sizeof可以對表示式求值:sizeof(2+3.14),實際是sizeof(double)。

3.sizeof可以對函式呼叫求值,實際上是對返回值型別求值;對引用的sizeof,其實是對其所繫結的物件的sizeof。

4.以下情況不能用sizeof進行求值。

1)不能對函式名求值

2)不能對不確定返回值的型別求值,如void

3)位域成員不可以使用sizeof求值

5.sizeof的結果是size_t,它被定義為unsigned int型別。該型別保證容納顯示所建立的最大物件的位元組大小。

一般,在32位編譯器下:

sizeof(int):4

sizeof(short):2

sizeof(long):4

sizeof(long long):8

sizeof(float):4

sizeof(double):8

sizeof(char):1

sizeof(p):4,(p為指標) (32位系統下指標的sizeof是4位元組,64位下是8位元組)

在不同的系統中這些值不一樣。

6.sizeof與strlen()比較,在計算字元陣列時,sizeof包含'\0',strlen()不包含'\0'。

7.對陣列sizeof可以計算陣列的大小。

8.陣列作為形參時,陣列名的sizeof是4個位元組。

9.32bit系統中,int **a[3][4];sizeof(a)=48。

10.對於c字串,需要牢記c/c++中乙個漢字佔兩個位元組(linux下3個位元組),且字串尾有空字元。

11.列舉的空間計算

enum只是定義了乙個常量集合,裡面沒有「元素」,而列舉是當做int型別儲存的,故列舉型別的sizeof值為4。

12. 含靜態變數、虛函式和位元組對齊的類的空間計算。

C 版本知多少

以前一直沒搞懂c 到底有些什麼版。到底咋回事,一位研究生同事還問過我c 和visual c 有什麼關係?坑嗲了吧?他都做c 開發的人都不曉得。這裡來解釋一下 microsoft visual c 6 非託管的開發工具 microsfot visual c net 基本.net的託管開發工具 borl...

C 過載解析 知多少?

在這裡先給大家提出乙個問題 編譯器怎麼知道我呼叫的這個函式應該是非模板函式?還是特化的模板函式?還是模板函式例項化?更或者是應該選擇哪乙個模板來例項化?可能上面的問題說起來有點繞,我用下面的 舉例吧 templatevoid func t a templatevoid func t a templa...

C 擴充套件方法知多少

前言 上篇 序列化效率比拼 誰是最後的贏家newtonsoft.json 介紹了下序列化方面的知識。看過demo的朋友可能注意到了裡面就用到過泛型的擴充套件方法,本篇打算總結下c 擴充套件方法的用法。博主打算分三個層面來介紹這個知識點,分別是 net內建物件的擴充套件方法 一般物件的擴充套件方法 泛...