關於c語言的sizeof

來源:互聯網
上載者:User

最近在看林銳博士的高品質c/c++編程指南,在書的後面附了一張測試的卷子,做了一下,發現自己很多都是處於半懂半不懂得階段,比如下面這道關於sizeof的題目:

 

 

1、void Func ( char str[100])

{

請計算

  sizeof( str ) =   4      (2 分)

}

 

2、char    str[100 ] = {0} ;

char   *p = str ;

int     n = 10;

請計算

sizeof (str ) =  100    (2 分)          

sizeof ( p ) =   4    (2 分)            

sizeof ( n ) =   4    (2 分)

 

 

3、void *p = malloc( 100 );

請計算

sizeof ( p ) =  4       (2 分)

 

其實大部分還是很好理解的,但是對於1、和2中的第一小問我剛開始被納悶到了,同樣都是對數組的首地址取sizeof,怎麼會兩者截然不同,開始我還懷疑林銳博士的書出錯了,自己編了個小程式果然如此,在網上查了一下資料,得到結果如下:

 

Char   str[100];  
sizeof是個編譯器常量,當程式執行到這裡的時候,編譯器在編譯階段己經知道他的長度了,會把它的長度記錄, sizeof是C中的一個操作符,是語言層面的功能,這個計算結果是在編譯時間完成的,就是說編譯器看到這個語句,它就會用100這個常數去替換,因此 產生的的彙編代碼裡有它的長度!  

 

當數組名作為參數傳遞時,會退化為指同類型的指標!  也就是說此事在1、中的str已經只是一個地址了,所以當然是4了,這也是為什麼我們傳遞數組的時候除了給他首地址還要給它數組的大小的緣故。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.