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的作用是求某個型別...