試題2:以下為Windows NT下的32位C++程序,請計算sizeof的值
void Func ( char str[100] ) { sizeof( str ) = ? }
void *p = malloc( 100 ); sizeof ( p ) = ? |
解答:
sizeof( str ) = 4 sizeof ( p ) = 4 |
剖析:
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。