sizeof 陣列與指標

2021-05-11 11:10:13 字數 821 閱讀 1122

注:本文摘自csdn論壇的乙個回帖,個人覺得看完之後豁然開朗,於是轉貼於此。

位址為:http://topic.csdn.net/u/20081016/23/6b46dc63-b0d7-4dad-806f-e8cd48a2208b.html

千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些時候而已。

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])

陣列作為引數時,編譯器在編譯期間一律編譯為指標,這樣儘管你定義str為陣列,實際上在編譯器眼裡後等同於:

void func ( char * str)

記住,陣列作為引數時,一律被編譯器編譯為指標。

sizeof 陣列 指標

千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些時候而已。sizeof是乙個奇特的函式,告訴你你也許不相信 sizeof在編譯的時候就已經確定sizeof的結果了,這有點類似於巨集。char str hello sizeof str 6 編譯器編譯的時候根據上下文完全知道str是乙個...

指標,陣列,sizeof

已知 char str1 absde char str2 absde char str3 8 char ss 0123456789 sizeof str1 4 sizeof str2 6 sizeof str3 8 sizeof ss 11 首先說明一點,char型別佔乙個位元組,所以sizeof ...

指標 陣列與sizeof運算子

1 sizeof是c語言的乙個運算子 主要sizeof不是函式,雖然用法很像函式 sizeof的作用是用來返回 裡邊 的變數或者資料型別占用的記憶體位元組數。2 sizeof存在的價值 主要是因為在不同平台下各種資料型別所佔的記憶體位元組數不盡相同 譬如int在32位系統上為4位元組,在16位系統上...