C語言中的sizeof是一個很有意思的關(guān)鍵字,經(jīng)常有人用不對,搞不清不是什么。我以前也有用錯的時候,現(xiàn)在寫一寫,也算是提醒一下自己吧。反正現(xiàn)在來看,還在搞sizeof是什么意思,怎么用正確,還是有點搞笑,都經(jīng)常用的東西,沒有理解透徹,就差的太遠了。
創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都做網(wǎng)站、成都網(wǎng)站設計和網(wǎng)站改版、網(wǎng)站營銷服務,追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶成百上千,服務滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注高端網(wǎng)站設計和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
一 ?sizeof是什么
sizeof是C語言的一種單目操作符,如C語言的其他操作符++、--等,sizeof操作符以字節(jié)形式給出了其操作數(shù)的存儲大小。操作數(shù)可以是一個表達式或括在括號內(nèi)的類型名。這個操作數(shù)不好理解對吧?后面慢慢看就明白了。sizeof的返回值是size_t,在64位機器下,被定義為long unsigned int。
二 sizeof如何使用
1、用于數(shù)據(jù)類型
使用形式: sizeof(type)。其中type如int 、double等。 例如sizeof(int)、sizeof(char*)、sizeof(double)。這個時候sizeof后面的類型必須用括號()包起來,不包起來是錯誤的,通過不了編譯。其中sizeof(void*)在64位下是8,而sizeof(void)是1。其實,在C語言中sizeof(函數(shù)),
如sizeof(main),結(jié)果也是1。但是在C++中,sizeof(void)和sizeof(函數(shù))都是非法的,通過不了編譯,后面C++就不說了,現(xiàn)在講C嘛。其實sizeof(函數(shù)),sizeof(void)雖然是1,但是是不正確的使用方式。
2、用于變量?
使用形式: sizeof(var)或sizeof var。當操作基本數(shù)據(jù)類型的時候,在我64位電腦的結(jié)果如下
作用是:計算常量、變量、數(shù)據(jù)類型 在內(nèi)存中占用的字節(jié)數(shù)
三、用sizeof計算常量在內(nèi)存中占用的字節(jié)數(shù)
sizeof(1) 計算常量 1 在內(nèi)存中占用的字節(jié)數(shù) ? 4
1 默認的事一個10進制的整數(shù)(int) 4
sizeof(2.3f); 計算 float類型的常量在內(nèi)存中占用的字節(jié)數(shù) 4
sizeof(2.3); ?計算 double 類型的常量在內(nèi)存中占用的字節(jié)數(shù) 8
sizeof('a'); ?計算 'a' 字符常量 在內(nèi)存中占用的字節(jié)數(shù) ?1 ?4?
EOF是end of file 的簡寫, 如讀到文件末尾,則函數(shù)返回一個 EOF值,它是一個宏定義,一般值是-1。使用示例如下:
#include?stdio.h
int?main()
{
char?c;
while((c?=?getchar())?!=?EOF){
putchar(c);
}
return?0;
}
說明:在Windows上按CTRL+Z鍵,表示EOF。
注意:EOF雖然是文件結(jié)束符,但并不是在任何情況下輸入Ctrl+D(Windows下Ctrl+Z)都能夠?qū)崿F(xiàn)文件結(jié)束的功能,只有在下列的條件下,才作為文件結(jié)束符。
(1)遇到getcahr函數(shù)執(zhí)行時,要輸入第一個字符時就直接輸入Ctrl+D,就可以跳出getchar(),去執(zhí)行程序的其他部分;
(2)在前面輸入的字符為換行符時,接著輸入Ctrl+D;
(3)在前面有字符輸入且不為換行符時,要連著輸入兩次Ctrl+D,這時第二次輸入的Ctrl+D起到文件結(jié)束符的功能。
sizeof()用來測給定的數(shù)據(jù)類型在內(nèi)存中占的字節(jié)長度;
比如我想知道int類型變量占幾個字節(jié) 就這樣使用:len = sizeof(int) 就可以了,len就是int型變量在內(nèi)存中字節(jié)數(shù);
當然你也可以這么用 int a; len = sizeof(a); 編譯器會知道a是int型變量的,會自動換成sizeof(int);
另外 自己定義的數(shù)據(jù)類型也可以用sizeof來求字節(jié)數(shù),比如定義了一個類class A{...},然后你
這樣用:len = sizeof(A),就能知道A占了幾個字節(jié);
最后,提示下,sizeof是關(guān)鍵字或者說是運算符,不是函數(shù),它的結(jié)果是編譯的時候就確定了的,沒有函數(shù)調(diào)用;
1、首先打開VS,新建一個 使用sizeof求出數(shù)組的大小 project。
2、接著在左側(cè)文件樹添加一個?sizeof.c 源文件。
3、其里面有stdio.h和stdlib.h頭文件,也可自己輸入。
4、然后輸入main函數(shù)主體及返回值。
5、定義一個數(shù)組,使用sizeof計算出數(shù)組的大小。
6、最后編譯運行程序,便能輸出數(shù)組的大小。
1、用法:
strlen(char*
pstr);//求的是字符串的實際長度
sizeof(類型說明符,數(shù)組名或表達式)
或sizeof
(
變量名)
比如說有以下數(shù)據(jù)類型:int
arr[10]
,a;
char
*str="hello
world";
sizeof(arr)/sizeof(a)/sizeof(str)都是可以的,但是只能使用strlen(str),而不能strlen(arr);
2、區(qū)別:
2.1
sizeof()是C語言中判斷數(shù)據(jù)類型或者表達式長度符;不是一個函數(shù),字節(jié)數(shù)的計算在程序編譯時進行,而不是在程序執(zhí)行的過程中才計算出來。
2.2
strlen()求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結(jié)果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。
總結(jié)的說來sizeof的適用范圍更廣,但是在返回實際的字符數(shù)組中的數(shù)據(jù)是,strlen()更方便,因為它返回的是實際的字符串長度,而sizeof是返回數(shù)組大小。
分享文章:c語言of函數(shù)用法,c++函數(shù)用法
網(wǎng)站路徑:http://chinadenli.net/article34/hecose.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、品牌網(wǎng)站設計、網(wǎng)站營銷、全網(wǎng)營銷推廣、虛擬主機、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)