1、首先打開VS,新建一個 使用sizeof求出數(shù)組的大小 project。
專注于為中小企業(yè)提供網站制作、網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)崇信免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
2、接著在左側文件樹添加一個?sizeof.c 源文件。
3、其里面有stdio.h和stdlib.h頭文件,也可自己輸入。
4、然后輸入main函數(shù)主體及返回值。
5、定義一個數(shù)組,使用sizeof計算出數(shù)組的大小。
6、最后編譯運行程序,便能輸出數(shù)組的大小。
C語言在頭文件中實現(xiàn)函數(shù)定義,可以按如下方法:
新建一個demo.h(也可以為其它文件名)的頭文件,在頭文件中添加函數(shù)定義,如:extern void demo();
新建一個c文件,在文件中將demo.h包含進來:#include“demo.h”,在此文件中將函數(shù)的主體寫上,如下:
void demo()
{
printf("Hello.");
?}
經過上述步驟,即可完成在頭文件中實現(xiàn)函數(shù)定義。
(1)sizeof不是函數(shù),它只是一個操作符(operator)。
(2)sizeof的作用是返回一個對象或者類型所占的內存字節(jié)數(shù),它的返回值的類型是size_t類型,而size_t是在頭文件stddef.h中定義的。size_t 這是一個依賴于編譯系統(tǒng)的值,一般定義為
「typedef unsigned int size_t;」,也就是無符號整型。
(3)sizeof有三種語法形式,如下:
1) sizeof( object ); // sizeof( 對象 );
2) sizeof( type_name ); // sizeof( 類型 );
3) sizeof object; // sizeof 對象;
所以,
int?i;
sizeof(?i?);?//?ok
sizeof?i;?//?ok
sizeof(?int?);?//?ok
sizeof?int;?//?error
既然寫法3可以用寫法1代替,為求形式統(tǒng)一以及減少我們大腦的負擔,只用寫法1就行了!
(4)說回你的提問,既然sizeof的返回值是unsigned int型,那么很明顯可以用 %u 、%o 、%x 來輸出,這三個都是無符號整型的格式符,分別對應十進制、八進制、十六進制。
(5)而%zd是修飾符z與有符號十進制整型格式符%d組合而成的格式符,表示按 size_t 的類型來輸出。那么,肯定,%zd 可以用來輸出 sizeof 的返回值。
(6)而%d是按有符號整型來輸出數(shù)值,所以與unsigned int的表示范圍是不一樣的,如果 sizeof 的返回值超出了 %d 的表示范圍的話,是會輸出一個不正確的數(shù)值的。
總結一下:sizeof 的返回值可以用 %u 、 %o 、 %x 、 %zd 來正常輸出,而用 %d 的時候需要注意返回值是否會超出 %d (即 signed int 型)的表示范圍。
另外,有的操作系統(tǒng)或編譯器里,size_t 的類型可能是 long unsigned int 型,所以 輸出 sizeof 的返回值的時候, 應該用 %lu 等。
以上,如有幫助,煩請點采納,謝謝!
C語言中sizeof()是一個關鍵字,不是函數(shù),不需要使用頭文件,補足知識:
1、跟int,
float關鍵字一樣,編譯器自動識別他們;
2、千萬不要因為它長得像函數(shù),就上它的當;
3、就像getchar()的返回值是個int型而不是char型一樣,C中有很多陷阱一樣。
#includecrtdefs.h//?crtdefs.h是size_t所在頭文件
//?它的原型定義如下:
#if?!defined?(_W64)
#if?!defined?(__midl)??(defined?(_X86_)?||?defined?(_M_IX86))
#define?_W64?__w64
#else??/*?!defined?(__midl)??(defined?(_X86_)?||?defined?(_M_IX86))?*/
#define?_W64
#endif??/*?!defined?(__midl)??(defined?(_X86_)?||?defined?(_M_IX86))?*/
#endif??/*?!defined?(_W64)?*/
#ifdef?_WIN64
typedef?unsigned?__int64????size_t;
#else??/*?_WIN64?*/
typedef?_W64?unsigned?int???size_t;
#endif??/*?_WIN64?*/