C語言sizeof 平常所忽略的細節

2021-09-29 19:22:30 字數 1361 閱讀 2325

本文章不從頭說起sizeof,只討論sizeof的一些細節問題。

今天做了一道面試題,是關於sizeof的,題如下:

int a = 3;

int b;

b = sizeof(++a + ++a);

printf(「%d, %d」, a, b);

(對於64或32位機)答案:

3, 4

為什麼?為啥a是3?它不是自加了兩次嗎?

sizeof對它的運算元,也就是操作物件,它是不給予運算的,也就是不會產生***。

***:b = a+3; 這條表示式的***就是b的值被修改為該表示式的值,該表示式的值是a+3,這就是***。

也就是說,不管你sizeof後跟的表示式對產生怎樣的***,sizeof它只求該表示式的值,sizeof所求的值不是普通的

資料運算,它所求的值是這個表示式最終會變成什麼型別,它只求這個。

說的很懵,先上基礎圖:

有了這個基礎,再看看下面的測試結果:

下面這兩張圖是測試說明,sizeof後跟的表示式不會產生***。

這張圖就用到了上面的基礎型別自動轉換的知識,在a+c這個表示式中,a是int,c是double,而a+c經過運算之後,最終這個a+c的型別就會自動轉換成double型,而這個double就是sizeof想要的最終值,其他的工作,例如產生***這樣的事它不幹,接著看下面的圖:

下面兩張測試圖可以很明顯的看出,sizeof根本不會讓a=a+c這個表示式產生***,使a等於a+c的值。

它只關心這條a=a+c表示式運算完後,最終的型別結果是什麼,這才是它想要的。

總結:sizeof後跟表示式時,它只關心該表示式運算完後 (相應的型別自動轉換完後) 是什麼型別,然後對該最終型別進行計算位元組大小並返回size_t(無符號整形)型別的值給變數b,不對表示式產生***。

c語言中的sizeof

一 sizeof的概念 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用...

解析C語言的sizeof

一 sizeof的概念 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可 以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元 的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof...

C語言中的sizeof

一 sizeof是編譯器的內建指示符 不是函式 sizeof用於計算型別或變數所佔的記憶體大小 sizeof的值在編譯期就已經確定 sizeof用於型別 sizeof type sizeof用於變數 sizeof var 或 sizeof var int var 0 printf d n sizeo...