類(lèi)型
創(chuàng)新互聯(lián)長(zhǎng)期為1000+客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為雄縣企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,雄縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
常見(jiàn)的有char、int、long、short、float、double及指針等.
字符類(lèi)型
這里單只char,char變量在內(nèi)存中存儲(chǔ)的是字符對(duì)應(yīng)的ASCII碼值。所以長(zhǎng)度也是固定的,為1個(gè)字節(jié)。
整數(shù)類(lèi)型
查了資料發(fā)現(xiàn)對(duì)各個(gè)類(lèi)型的整數(shù)占用字節(jié)數(shù)是有一個(gè)規(guī)定的,雖然16位32位或者64位的機(jī)子各種類(lèi)型所占用的長(zhǎng)度并不一樣。規(guī)則如下:
short 至少占用2個(gè)字節(jié)。
int 建議為一個(gè)機(jī)器字長(zhǎng)。32位環(huán)境下機(jī)器字長(zhǎng)為4字節(jié),64位環(huán)境下機(jī)器字長(zhǎng)為8字節(jié)。
short 的長(zhǎng)度不能大于 int,long 的長(zhǎng)度不能小于 int。
所以說(shuō),short并不一定短,long并不一定短,有可能都和int一樣長(zhǎng)。
浮點(diǎn)數(shù)(小數(shù))
C中浮點(diǎn)數(shù)有兩種,float和double,不像整數(shù),小數(shù)的長(zhǎng)度始終是固定的,float占用4個(gè)字節(jié),double占用8個(gè)字節(jié)。
指針
C中指針即為地址,所以編輯器的尋址空間則是指針的地址范圍。所以指針變量在32位機(jī)器的尋址空間為2^32,要將所有地址都表示出來(lái)則需要為4個(gè)字節(jié)長(zhǎng)度,所以要占用4個(gè)字節(jié)長(zhǎng)度。同理64位的編譯器則需要8個(gè)字節(jié)長(zhǎng)度。
字符串a(chǎn)bc\0defgh,一共占10個(gè)字節(jié)。
首先,C語(yǔ)言中每一個(gè)字符占1個(gè)字節(jié)。
其次,\0是轉(zhuǎn)義字符,它占一個(gè)字節(jié),而不是\和0分別占一個(gè)字節(jié)。
再次,C風(fēng)格的字符串,為了方便操作,默認(rèn)結(jié)尾增加一個(gè)\0,以表示字符串結(jié)束,這也算一個(gè)。
最后,能看到a、b、c、\0、d、e、f、g、h一共9個(gè)字節(jié),加上看不到編譯器添加的末尾的\0字符,共10個(gè)字節(jié)。
float,char,int型數(shù)據(jù)分別占4,1,4個(gè)字節(jié),不是函數(shù),是數(shù)據(jù)
用sizeof運(yùn)算可以證明
printf("%d,%d,%d\n",sizeof(float),sizeof(char),sizeof(int));
%nd,這里的n表示輸出數(shù)據(jù)占幾位,默認(rèn)是靠右對(duì)齊,不足的用空格補(bǔ)齊,超出的正常顯示。%nf一樣的意思。
(1)sizeof不是函數(shù),它只是一個(gè)操作符(operator)。
(2)sizeof的作用是返回一個(gè)對(duì)象或者類(lèi)型所占的內(nèi)存字節(jié)數(shù),它的返回值的類(lèi)型是size_t類(lèi)型,而size_t是在頭文件stddef.h中定義的。size_t 這是一個(gè)依賴(lài)于編譯系統(tǒng)的值,一般定義為
「typedef unsigned int size_t;」,也就是無(wú)符號(hào)整型。
(3)sizeof有三種語(yǔ)法形式,如下:
1) sizeof( object ); // sizeof( 對(duì)象 );
2) sizeof( type_name ); // sizeof( 類(lèi)型 );
3) sizeof object; // sizeof 對(duì)象;
所以,
int?i;
sizeof(?i?);?//?ok
sizeof?i;?//?ok
sizeof(?int?);?//?ok
sizeof?int;?//?error
既然寫(xiě)法3可以用寫(xiě)法1代替,為求形式統(tǒng)一以及減少我們大腦的負(fù)擔(dān),只用寫(xiě)法1就行了!
(4)說(shuō)回你的提問(wèn),既然sizeof的返回值是unsigned int型,那么很明顯可以用 %u 、%o 、%x 來(lái)輸出,這三個(gè)都是無(wú)符號(hào)整型的格式符,分別對(duì)應(yīng)十進(jìn)制、八進(jìn)制、十六進(jìn)制。
(5)而%zd是修飾符z與有符號(hào)十進(jìn)制整型格式符%d組合而成的格式符,表示按 size_t 的類(lèi)型來(lái)輸出。那么,肯定,%zd 可以用來(lái)輸出 sizeof 的返回值。
(6)而%d是按有符號(hào)整型來(lái)輸出數(shù)值,所以與unsigned int的表示范圍是不一樣的,如果 sizeof 的返回值超出了 %d 的表示范圍的話,是會(huì)輸出一個(gè)不正確的數(shù)值的。
總結(jié)一下:sizeof 的返回值可以用 %u 、 %o 、 %x 、 %zd 來(lái)正常輸出,而用 %d 的時(shí)候需要注意返回值是否會(huì)超出 %d (即 signed int 型)的表示范圍。
另外,有的操作系統(tǒng)或編譯器里,size_t 的類(lèi)型可能是 long unsigned int 型,所以 輸出 sizeof 的返回值的時(shí)候, 應(yīng)該用 %lu 等。
以上,如有幫助,煩請(qǐng)點(diǎn)采納,謝謝!
a)putchar函數(shù):將指定的(表達(dá)式的值所對(duì)應(yīng)的)字符輸出到標(biāo)準(zhǔn)輸出終端(屏幕)上。
格式:int putchar( int c );
例如:putchar(‘a(chǎn)’+3);打印的結(jié)果是d,是一個(gè)字符而不是數(shù)值。
a的ASCII碼是97,加3是ASCII碼表中100對(duì)應(yīng)的字符就是d。
例如:putchar(99);打印的結(jié)果是c,代入一個(gè)數(shù)字打印出的是一個(gè)字符。
就如同代入的是學(xué)號(hào),打印出來(lái)的是姓名一樣。
b)putc函數(shù):將指定的字符輸出到指定標(biāo)準(zhǔn)輸出流(屏幕或一個(gè)文件)中。
格式:int putc( int c, FILE *stream );
c)等價(jià)關(guān)系:putc的功能中包含putchar的功能。
putchar(c)等價(jià)于putc(c,stdout)。
例如:putc(‘A’,stdout)等價(jià)于putchar(‘A’)
擴(kuò)展資料
C語(yǔ)言的字符對(duì)齊
1、數(shù)據(jù)類(lèi)型自身的對(duì)齊值:對(duì)于char型數(shù)據(jù),其自身對(duì)齊值為1,對(duì)于short型為2,對(duì)于int,float,double類(lèi)型,其自身對(duì)齊值為4,單位字節(jié)。
2、復(fù)雜類(lèi)型(如聯(lián)合,結(jié)構(gòu)體或者類(lèi))的自身對(duì)齊值:其成員中自身對(duì)齊值最大的那個(gè)值。
3、指定對(duì)齊值:#pragma pack (value)時(shí)的指定對(duì)齊值value。
4、數(shù)據(jù)成員、復(fù)雜類(lèi)型(如聯(lián)合,結(jié)構(gòu)體或類(lèi))的有效對(duì)齊值:自身對(duì)齊值和指定對(duì)齊值中小的那個(gè)值。
參考資料來(lái)源:百度百科—c語(yǔ)言
char :1個(gè)字節(jié); ? char*(即指針變量):4個(gè)字節(jié)(32位的尋址空間是2^32, 即32個(gè)bit,也就是4個(gè)字節(jié)。同理64位編譯器); ? ?short int:2個(gè)字節(jié); ? ? int:4個(gè)字節(jié); ? ? unsigned int :4個(gè)字; ? ?float: 4個(gè)字節(jié); ? ?double:8個(gè)字節(jié); ? ?long:4個(gè)字節(jié); ? ?long long:8個(gè)字節(jié); ? ?unsigned long: 4個(gè)字節(jié)
我用的書(shū)里,long寫(xiě)的是8個(gè), 我認(rèn)為應(yīng)該是錯(cuò)誤的,是 4個(gè)字節(jié)
#include?stdio.h
int?main(void)?
{
printf("char?所占字節(jié)數(shù)?%d\n",?sizeof(char));
printf("int?所占字節(jié)數(shù)?%d\n",?sizeof(int));
printf("short?所占字節(jié)數(shù)?%d\n",?sizeof(short));
printf("long?所占字節(jié)數(shù)?%d\n",?sizeof(long));
printf("float?所占字節(jié)數(shù)?%d\n",?sizeof(float));
printf("double?所占字節(jié)數(shù)?%d\n",?sizeof(double));
}
文章標(biāo)題:c語(yǔ)言占字節(jié)數(shù)函數(shù) c語(yǔ)言字符串占字節(jié)
URL標(biāo)題:http://chinadenli.net/article28/dodegcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、ChatGPT、服務(wù)器托管、小程序開(kāi)發(fā)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容