sizeof 陣列 指標

2021-05-23 14:36:54 字數 680 閱讀 1856

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

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

已知 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 陣列與指標

注 本文摘自csdn論壇的乙個回帖,個人覺得看完之後豁然開朗,於是轉貼於此。位址為 http topic.csdn.net u 20081016 23 6b46dc63 b0d7 4dad 806f e8cd48a2208b.html 千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些...

sizeof 陣列名 和sizeof 指標

在做這道題時 32位環境下,int p new int 10 請問sizeof p 的值為 a 4 b 10 c 40 d 8 我以為正確答案為c,int型別為32位,佔四個位元組,10個自然就是40了,結果正確答案為a,只是指標p佔的空間。因此寫段 測試一下 cpp view plain copy...