.
指標變數的sizeof
學過 資料結構的你應該知道
指標是乙個很重要的概念,它記錄了另乙個物件的位址。既然是來存放位址的,那麼它當然等於計算機內部
位址匯流排的寬度。所以在32位計算機中,乙個
指標變數的返回值必定是4(注意結果是以
位元組為單位),可以預計,在將來的
64位系統中指標變數的sizeof結果為8。
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();//
函式指標
sizeof( pc ); // 結果為4
sizeof( pi ); // 結果為4
sizeof( ps ); // 結果為4
sizeof( ppc ); // 結果為4
sizeof( pf );// 結果為4
指標變數的sizeof值與指標所指的物件沒有任何關係,正是由於所有的指標變數所佔記憶體大小相等,所以mfc訊息處理函式使用兩個引數wparam、lparam就能傳遞各種複雜的訊息結構(使用指向
結構體的指標)。
. 陣列的sizeof
陣列的sizeof值等於陣列所占用的記憶體位元組數,如:
char a1 = "abc";
int a2[3];
sizeof( a1 ); // 結果為4,
字元末尾還存在乙個null終止符
sizeof( a2 ); // 結果為3*4=12(依賴於int)
一些朋友剛開始時把sizeof當作了求
陣列元素的個數,現在,你應該知道這是不對的,那麼應該怎麼求陣列元素的個數呢easy,通常有下面兩種寫法:
int c1 = sizeof( a1 ) / sizeof( char ); // 總長度/單個元素的長度
int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 總長度/第乙個元素的長度
寫到這裡,提一問,下面的c3,c4值應該是多少呢
void foo3(char a3[3])
void foo4(char a4)
也許當你試圖回答c4的值時已經意識到c3答錯了,是的,c3!=3。這裡函式引數a3已不再是
陣列型別,而是蛻變成
指標,相當於char* a3,為什麼仔細想想就不難明白,我們呼叫函式foo1時,程式會在棧上分配乙個大小為3的陣列嗎不會!陣列是「傳址」的,呼叫者只需將
實參的位址傳遞過去,所以a3自然為指標型別(char*),c3的值也就為4。
指標變數和陣列
int arr 2 int arr int i arr 0 arr 1 23 char str abc 字元內容儲存在堆上 char str1 字元內容儲存在棧上第一種情況 字元內容會儲存在堆上,並在棧裡儲存str指標變數,變數值為字元在堆上的首位址。第二種情況 字元內容會儲存在棧上,但是不會有額外...
指標和陣列中sizeof和strlen的相關筆試題
sizeof和strlen的區別 1 sizeof是運算子,而strlen是函式 2 sizeof的用法是sizeof 引數 這個引數可以是陣列,指標,型別,物件,甚至是函式,其值在編譯的時候就計算好了,而strlen的引數必須是字元型指標 char 其值必須在函式執行的時候才能計算出來 3 siz...
extern指標和陣列的用法
void main 你可以選擇除錯,或者去看彙編 但是問題的本質,也許不是那麼簡單的,因為我們選擇任何除錯的時候都是經過編譯完成之後所看到的,而這個錯誤恰恰需要我們去提前認識到在編譯的時候做了乙個怎麼樣的處理。在學習的時候也許有過這樣的解釋,指標和陣列是不同的,只是有時候可以通用而已。在extern...