關於sizeof 使用的幾個圈套

2021-08-15 16:15:12 字數 1003 閱讀 2843

sizeof(指標變數)

sizeof(陣列名)

sizeof(作形參的陣列變數名)

要點:在32位linux下:

char str=」hello」;

char *p=str;

int n=10;

void func(char str[100])

void *p=malloc(100);

sizeof(str)=6

sizeof(p)=4

sizeof(n)=4

sizeof(str)=4

sizeof(p)=4

sizeof 不能測定動態分配的陣列大小。

strlen 可用於測定動態分配的字元陣列長度但不適合int.

_msize() 可用於測定動態分配的陣列用去的記憶體,通常比陣列單元要多一點。

來自 剖析:

func ( char str[100] )函式中陣列名作為函式形參時,在

函式體內,陣列名失去了本身的內涵,僅僅只是乙個指標;在失

去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操

作,可以被修改。

陣列名的本質如下:

(1)陣列名指代一種資料結構,這種資料結構就是陣列;

例如:

char str[10];

cout << sizeof(str) << endl;

輸出結果為 10,str 指代資料結構 char[10]。

(2)陣列名可以轉換為指向其指代實體的指標,而且是乙個

指標常量,不能作自增、自減等操作,不能被修改;

char str[10];

str++; //編譯出錯,提示 str 不是左值

(3)陣列名作為函式形參時,淪為普通指標。

windows nt 32 位平台下,指標的長度(占用記憶體的大小)為

4 位元組,故 sizeof( str ) 、sizeof ( p ) 都為 4。

來自

sizeof使用中的幾個誤區總結

例如 char ss2 0123456789 sizeof ss2 結果為11,而不是10 字元陣列ss2中包含隱含的 0 也算乙個字元,佔乙個位元組,所以ss2的總的大小為11位元組。結構體的sizeof涉及到位元組對齊問題。為什麼需要位元組對齊?計算機組成原理教導我們這樣有助於加快計算機的取數速...

關於c 中的sizeof

再舉個例子 include iostream using namespace std int main 為什麼a結果不是2呢?sizeof本身是c c 的乙個關鍵字 和int char一樣 而不是乙個函式,這注定它是在編譯期所執行的,而在編譯期a b是不會被執行的 同時sizeof的作用是求某個型別...

關於c 中的sizeof

再舉個例子 include iostream using namespace std int main 為什麼a結果不是2呢?sizeof本身是c c 的乙個關鍵字 和int char一樣 而不是乙個函式,這注定它是在編譯期所執行的,而在編譯期a b是不會被執行的 同時sizeof的作用是求某個型別...