c語言中的sizeof是乙個很有意思的關鍵字,經常有人用不對,搞不清不是什麼。我以前也有用錯的時候,現在寫一寫,也算是提醒一下自己吧。反正現在來看,還在搞sizeof是什麼意思,怎麼用正確,還是有點搞笑,都經常用的東西,沒有理解透徹,就差的太遠了。
第一 sizeof是什麼
sizeof是c語言的一種單目操作符,如c語言的其他操作符++、--等,sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。這個運算元不好理解對吧?後面慢慢看就明白了。sizeof的返回值是size_t,在64位機器下,被定義為long unsigned int。
第二 sizeof如何使用
1、用於資料型別
使用形式: sizeof(type)。其中type如int 、double等。 例如sizeof(int)、sizeof(char*)、sizeof(double)。這個時候sizeof後面的型別必須用括號()包起來,不包起來是錯誤的,通過不了編譯。其中sizeof(void*)在64位下是8,而sizeof(void)是1。其實,在c語言中sizeof(函式),如sizeof(main),結果也是1。但是在c++中,sizeof(void)和sizeof(函式)都是非法的,通過不了編譯,後面c++就不說了,現在講c嘛。其實sizeof(函式),sizeof(void)雖然是1,但是是不正確的使用方式。
2、用於變數
使用形式: sizeof(var)或sizeof var。當操作基本資料型別的時候,在我64位電腦的結果如下
sizeof(char) 1
sizeof(char) 1
sizeof(short) 2
sizeof(int) 4
sizeof(long) 8
sizeof(float) 4
sizeof(double) 8
sizeof(long double) 16
sizeof(int*) 8
sizeof('a') 4
sizeof(1) 4
sizeof(1.0f) 4
sizeof(1.0) 8
sizeof "abc" 4
其中sizeof('a') 4有點奇怪哈。
當運算元是聯合型別時,sizeof是其最大位元組成員的位元組數。當運算元是結構型別時,sizeof是其成員型別的總位元組數,包括補充位元組在內。如下:
union u
u;
sizeof(u) = max(sizeof(c),sizeof(d)) = sizeof(1,8) = 8;
而sizeof結構體的時候,還要考慮對齊的問題:struct s
s;
在我的電腦上,sizeof(s)的大小是16。
基本上說的比較清楚了,但有些時候和函式引數相關的時候,還是要注意,比如
int calc(char a[10])
int main()
; calc(a);
return 0;
}
列印的結果是8,而不是10,這個是要注意的。 C語言中sizeof 的用法
只要參加軟體研發的筆試 c c 幾乎都會涉及到sizeof 的用法,我昨天也遇到了,有的也會,但是真正sizeof 的核心還是沒有領會,今天上網,無聊中就看到了詳細的sizeof 的闡述,現在分享給大家。sizeof sizeof 一般形式為 sizeof object 也可以sizeof var ...
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...