研究問題:
- 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() 可用於測定動態分配的數組用去的內存,通常比數組單元要多一點。
來自 http://blog.csdn.net/djb100316878/article/details/42920341 剖析:
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。