千萬不要把數組名看成指針,儘管有些時候他們是相通的,但也僅限某些時候而已。
sizeof是一個奇特的函數,告訴你你也許不相信——sizeof在編譯的時候就已經確定sizeof的結果了,這有點類似於宏。
char str[] = “Hello” ; sizeof (str ) = 6
編譯器編譯的時候根據上下文完全知道str是一個數組,sizeof (str ) = 6 理所當然是在求數組所佔字節數,這個字節數在編譯期間就可以確定(數組的大小必須在編譯前指定好,C語言規定)
void *p = malloc( 100 ); sizeof ( p ) = 4
編譯器看到p是個指針,可是誰能保證指針所指內存的大小呢?儘管你這裏寫着100,但是malloc可是動態分配,沒人敢保證malloc一定返回100個字節,甚至比如你不調用malloc,調用一個自己寫的函數,編譯器總之是無法在編譯期間就確定指針所指內存大小的,而sizeof又必須在編譯期間知道結果,那好,sizeof只好返回指針本身所佔內存的大小,32位機上是4個字節,64位機上是8個字節。
void Func ( char str[100])
{ sizeof( str ) = 4 }
數組作爲參數時,編譯器在編譯期間一律編譯爲指針,這樣儘管你定義str爲數組,實際上在編譯器眼裏後等同於:
void Func ( char * str)
{ sizeof( str ) = 4 }
記住,數組作爲參數時,一律被編譯器編譯爲指針。
關於sizeof()函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
理解Java中的回調
nuistchn
2020-07-04 01:02:01
ubuntu下的root隨機密碼問題
nuistchn
2020-02-24 00:36:05
兩個有序數組,求第K小數
ConwayTian
2018-09-04 13:23:28