sizeof()關鍵字
- sizeof()怎麼用?很多剛剛接觸sizeof總以為是一個函數,因為它後面有括号。接下來我們一起來剖析一下這個被冤枉的關鍵字。
- 其實我們不知道他是32個關鍵字的其中一個,我們也可以利用其它的辦法來确定他到底是不是函數,首先來看下面的代碼:
int i=0;
(A)sizeof(int) ; (B)sizeof(i);
(C)sizeof int; (D)sizeof i;
可以很肯定的是(A)(B)的值都是4,那你想一想(C)(D)的值到底是多少呢?感興趣的可以先在自己的編譯器上打一下代碼來驗證自己的想法。
- 在32位的系統中通過visual C 6.0或者任意編譯器的調試我們其實都可以發現(D)的值也是4,到這裡你是不是覺得很奇怪,為什麼sizeof不用括号同樣可以計算出來,同樣的在這裡你就應該把它和函數區分開來,很清楚地知道他其實真的不是函數,如果是函數你覺得吧後面的括号省略掉也可以運行吧?我們想不可能吧!
- 最後我們來看看最後一個(C)的情況,我想如果不出意外的話應該是搬一起報錯了吧?本着遇到錯誤就解決錯誤的心理,我們來探讨一下為什麼他會出錯,我們好好地看一下C答案表示的是什麼意思:(C)sizeof int 這是什麼玩意?int的前面加一個關鍵字?表示什麼我們不知道,但是明顯不正确,一般在int前面我們都會加 unsigned 、const 等關鍵字,但是真的不能加sizeof。
記住
- sizeof在計算變量所占的空間大小時,括号其實是可以省略的。
- 一般情況下sizeof是在編譯的時候求值(C99計算柔性數組所占空間情況除外),所以sizeof(i )并不會引起什麼壞的後果,但是沒有意義呀,因為i和i 的類型一樣,所以就沒有必要寫這樣迷惑的代碼。
- “sizeof(i="123456")”,這樣的代碼也是不被允許的,因為i還是原來的值并不會在括号裡面把它賦值為123456,總之你要注意的一點就是sizeof裡面的括号不要哦有任何的運算符。
自測題
在這裡我們一起來共同探讨幾個比較有意思的C語言筆試題目如果你覺得毫無壓力那麼恭喜你,你對sizeof的理解以及比較透徹:int *p=NULL;
sizeof(p); 的值是多少?
sizeof(*p);呢?
int a[100];
sizeof(a);的值是多少?
sizeof(a[100]);呢? //注意是本列的代碼
sizeof(&a);這樣呢?
sizeof(&a[0]);還有這樣的呢?
int b[100];
int fun (int b[100])
{sizeof(b);} 這樣的值又是多少?
在這裡還是很希望各位能夠慢慢地把這幾道筆試題做出來,技術就是不斷的日積月累加油各位!
, 更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!