深入淺出sizeof

2021-04-12 11:48:51 字數 2048 閱讀 3150

[int佔4位元組,short佔2位元組]

1.0 回答下列問題:[答案在文章末尾]

1. sizeof(char) =                           

2. sizeof 'a'   =                           

3. sizeof "a"   =                        

4. strlen("a")) =

如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起**關於sizeof的用法了。  

對於前面的題目,我想一般有一定c基礎的同志應該不會答錯1和4題。至於第2題,我想應該要清楚sizeof是求字串所佔的記憶體。"a"在記憶體中的表現為a/0,別忘了末尾的/0也佔乙個位元組呢。至於第2題,可能有些人會驚訝了。c 語言中,字元常數是int 型, 因此 sizeof('a') 是 sizeof(int), 這是另乙個與 c++ 不同的地方。既然字元常數是int 型,那麼int就可以存放4個字元,我們可以得到sizeof 'abcd'為 4。  

1.1 回答以下題目[答案在文章末尾]

short (*ptr[100])[200];

1. sizeof(ptr)           =

2. sizeof(ptr[0])        =

3. sizeof(*ptr[0])       =

4. sizeof((*ptr[0])[0])) =   

是不是又開始暈了。這裡我們定義了乙個100個指標陣列,每個指標均指向有200個元素的陣列,其記憶體占用為200*sizeof(short)位元組。那麼這100個陣列指標的大小sizeof(ptr)為100*sizeof(short*)。接著,指標陣列的第乙個指標ptr[0]指向第乙個陣列,所以這個指標ptr[0]的大小實際上就是乙個普通指標的大小,即sizeof(short*)。*ptr[0]指向第乙個陣列的起始位址,所以sizeof(*ptr[0])實際上求的是第乙個組的記憶體大小200*sizeof(short)。(*ptr[0])[0])是第乙個陣列的第乙個元素,因為是short型,所以這個元素的大小sizeof((*ptr[0])[0]))等價於sizeof(short)。

1.2 回答以下題目[答案在文章末尾]

#include

#pragma pack(push)

#pragma pack(2)

#pragma pack(pop)

int main(int argc, char *argv)

問題:列印結果為什麼呢?

)+sizeof(banana)+sizeof(orange)+sizeof(watermelon)+((plum:5bit+peach:28bit+15bit)/8bit)+sizeof(tomato)+sizeof(next)(注意式子中115bit表示補齊記憶體,使其以2對齊,),既sizeof(fruit)=(sizeof(char)+1)+sizeof(int)+sizeof(short)+sizeof(double)+sizeof(char*)+sizeof(struct fruit*)。第乙個資料結構宣告完了之後,又使用#pragma pack(4)強制設定編譯器對齊屬性為4,所以同理,可以得到sizeof(fruit2)=(sizeof(char)+3)+sizeof(int)+(sizeof(short)+2)+sizeof(double)+((5bit+28bit+31bit)/8bit)+sizeof(char*)+sizeof(struct fruit2*)。

注:#pragma pack(push)儲存預設對齊,#pragma pack(pop)恢復預設對齊。

----------------------------------------答案:

1.0: 1,4,2,1

1.1: 400,4,400,2

1.2: fruit=30,fruit2=36

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...

深入淺出PHP Exploring PHP

一直以來,橫觀國內的php現狀,很少有專門介紹php內部機制的書。呵呵,我會隨時記錄下研究的心得,有機會的時候,彙總成書。今天這篇,我內心是想打算做為乙個導論 php是乙個被廣泛應用的指令碼語言,因為它的成功,所以很多時候,我們應用php的時候是更不不需要考慮底層到底是怎麼實現的。我相信大多數的 p...