?? 教學(xué)--第四章 數(shù)據(jù)類型.htm
字號(hào):
默認(rèn)是16位的。此時(shí),如果想實(shí)現(xiàn)32位整數(shù),就必須定義為這樣的類型:long int)。</P>
<P>在浮點(diǎn)數(shù)方面,我們最常用的將是 double。它的精度適合于我們?nèi)粘V械母鞣N運(yùn)算。當(dāng)然,float的精度也在很多情況下也是符合要求的。</P>
<H4><A name=4.4.2>4.4.2</A> 布爾型(bool)和無(wú)類型(void)</H4>
<P>除字符型,整型,實(shí)型以外,布爾型和無(wú)類型也是較常用的兩種數(shù)據(jù)類型。</P>
<P> </P>
<P><B>布爾型(bool)</B></P>
<P>布爾類型是C++的內(nèi)容,C語(yǔ)言沒(méi)有這一類型。</P>
<P>布爾類型的數(shù)據(jù)只有兩種值:true(真) 或 false(假)。</P>
<P>什么時(shí)候使用布爾型呢?</P>
<P>履歷表中一般有“婚否”這一項(xiàng),婚否這種數(shù)據(jù)就適于用真或假來(lái)表示。性別男女,有時(shí)也會(huì)用布爾值表示,(一般程序都不約而同地把男性設(shè)置“真”,女性設(shè)置為“假”。)</P>
<P> </P>
<P><B>無(wú)類型(void)</B></P>
<P>這個(gè)類型比較怪“無(wú)”類型。是的,沒(méi)有類型的類型。或者我們這樣認(rèn)為比較好接受:在不需要明確指定類型的時(shí)候,我們可能使用 void
來(lái)表示。</P>
<H4><A name=4.4.3>4.4.3</A> 為數(shù)據(jù)類型起別名:typedef</H4>
<P>用法: typedef 原類型名 類型的別名;</P>
<P> </P>
<P>為什么要給現(xiàn)成的數(shù)據(jù)類型起別名?當(dāng)然也是為了遷就我們?yōu)槿祟悺>拖裎覀兘o人家起綽號(hào)一樣,形象好記,不易混淆。</P>
<P>比如,我們?cè)诰幊讨行枰褂靡恍┠挲g數(shù)據(jù),應(yīng)該使用整型(int)類型。另我們還使用到身高的數(shù)據(jù),由于單位采用“厘米”,所以也可能使用int類型。兩種數(shù)據(jù)屬于同一數(shù)據(jù)類型,但所代表的內(nèi)容卻不容混淆。我們可以使用typedef來(lái)臨時(shí)為int取兩個(gè)別名:</P>
<P> </P>
<P>typedef int AGE;</P>
<P>typedef int STATURE;</P>
<P> </P>
<P>通過(guò)以上兩行話(行末都需要以分號(hào)結(jié)束),我們獲得了兩種新的數(shù)據(jù)類型名稱。它們的一切屬性都和其原名
int的數(shù)據(jù)類型完全一致。只是名字變得很有意義一點(diǎn)而已。</P>
<P>這里為了說(shuō)明問(wèn)題舉一簡(jiǎn)單的例子,事實(shí)上例子的情況并不值得使用typedef來(lái)取別名。typedef常用來(lái)為一些復(fù)雜的類型取一簡(jiǎn)單且意義明了的別名。比如定義函數(shù)的指針。在C++
Builder的控件編寫中,更是有非常頻繁地用typedef來(lái)為那些定義復(fù)雜的事件函數(shù)(類成員函數(shù)的指針)取別名。</P>
<H3><B><A name=4.5>4.5</A> sizeof 的使用</B></H3>
<P>用法: sizeof(數(shù)據(jù)類型)</P>
<P> sizeof(變量)</P>
<P> </P>
<P>C/C++提供了關(guān)鍵字sizeof,用于在程序中測(cè)試某一數(shù)據(jù)類型的占用多少字節(jié)。sizeof有兩種用法,效果一樣,由于我們還沒(méi)有學(xué)變量,所以我們先講第一種。 </P>
<P>sizeof是一種計(jì)算,計(jì)算的對(duì)象是指定的一種數(shù)據(jù)類型,計(jì)算的結(jié)果是該數(shù)據(jù)類型占用的字節(jié)數(shù)目。如:</P>
<P>sizeof(char) = 1;也就是說(shuō)char類型占用1個(gè)字節(jié)。</P>
<P>sizeof(int) = 4;也就是說(shuō)int類型占用4個(gè)字節(jié)。</P>
<H4><A name=4.5.1>4.5.1</A> sizeof 例程</H4>
<P>下面我們來(lái)完成一個(gè)實(shí)例。這個(gè)例子使用sizeof將我們已學(xué)的所有數(shù)據(jù)類型的名稱,占用字節(jié)數(shù)列出。</P>
<P> </P>
<P>首先,新建一個(gè)控制臺(tái)工程(詳細(xì)圖解請(qǐng)見: <A
href="http://d2school.com/bcyl/bhcpp/newls/ls02.htm#DOS 版 Hello,World">第2章第3節(jié)
DOS 版 Hello World</A> )
<P>步驟:
<P>1、選擇 主菜單 File | New;
<P>2、New Items 對(duì)話框,選 New 頁(yè)中的 Console Wizard,然后點(diǎn)OK;
<P>3、Console Wizard 對(duì)話框,Source Type中選中 C++ ,右邊的分組中<B>只選中</B> Console
Application 。點(diǎn) OK
<P>
<P>完成以上步驟后,代碼編輯窗口自動(dòng)新建并打開Unit1.cpp,其代碼如下:
<P>//---------------------------------------------------------------------------
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{<BR> return 0;
<P>}
<P>//---------------------------------------------------------------------------
<P>請(qǐng)保存整個(gè)工程,包括工程文件名(Project1.bpr)和一個(gè)CPP文件(Unit1.cpp),請(qǐng)參見第二章。不過(guò)為了工程名字有點(diǎn)意義,我決定將它另存為SizeOf.bpr。
<P>按F9,編譯并運(yùn)行這個(gè)空白工程,會(huì)發(fā)現(xiàn)一人DOS窗口一閃而過(guò),這我們?cè)诘诙戮椭懒恕? <P>請(qǐng)?zhí)砑右韵麓a中的粗體部分:
<P>//---------------------------------------------------------------------------
<P><B>#include <iostream.h></B>
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{<BR> <B>getchar();<BR>
</B><B> </B>return 0;
<P>}
<P>//---------------------------------------------------------------------------
<P>在第二章中我們的加過(guò)類似的代碼,目的一樣:讓程序執(zhí)行以后不是自動(dòng)結(jié)束,而是在我們敲一個(gè)回車鍵后,才結(jié)束,因?yàn)槲覀冃枰榭闯绦虻膱?zhí)行結(jié)果。以后我們所有使用控制臺(tái)形式的程序,都將需要這兩行代碼,不過(guò)以后不會(huì)特別指出了。如你還是有些模糊這兩話的作用,最好的辦法是現(xiàn)在再按一次F9鍵,運(yùn)行這個(gè)程序。
<P>
<P>下面開始我們的 sizeof 用法初試。
<P>我們這程序目標(biāo)是輸出所有我們已學(xué)的數(shù)據(jù)類型:整數(shù)(含unsigned,short的修飾等),實(shí)型(含各精度),字符,bool等數(shù)據(jù)類型占用的字節(jié)數(shù)。但我們事實(shí)上還沒(méi)有學(xué)過(guò)C/C++的任何語(yǔ)法,所以我想我們還是先來(lái)一個(gè)就一句話的,確保成功以后,再完成所有的語(yǔ)句。
<P>請(qǐng)?zhí)砑右韵麓a中的粗體部分:
<P>為了省定版面,我只抄出需要變化的main那一部分,之前的代碼由于不再需要變化,就不抄到這里了,省略號(hào)只用來(lái)示意前面還有代碼,你別把……也輸入代碼中啊!
<P>……
<P>int main(int argc, char* argv[])
<P>{<BR><B> cout << "Size of char is :
" << sizeof(char) <<
endl;<BR></B><B> </B>
getchar();<BR><B> </B><B> </B>return 0;
<P>}
<P>//---------------------------------------------------------------------------
<P>這次輸入的是這一行:
<P>cout << "Size of char is : " << sizeof(char) << endl;
<P>這是一行標(biāo)準(zhǔn)的C++ 語(yǔ)句。cout 在
C++里表示“標(biāo)準(zhǔn)輸出設(shè)置”。曾經(jīng)是每個(gè)學(xué)習(xí)C++的人必學(xué)的內(nèi)容。在Windows的編程里,它已是昨日黃花,我想諸位就不用在花什么時(shí)間去學(xué)習(xí)它了,只要簡(jiǎn)單地弄明白它的基本用法就是。
<P>cout 和之后的 << 合用。 后者是兩小于號(hào),你可別老眼昏眼看作是中文的書名號(hào)《 。<<
在C++里屬于操作符重載,我們以后在學(xué)習(xí)時(shí),還會(huì)在不同的場(chǎng)合里遇到見和它的另一位老兄:>> 。理解并且迅速記下 <<
的作用是看它的箭頭方向:
<P><<
的指向左邊,它的意思是把它右邊的東西給,或者是接到右邊。現(xiàn)在,它的左邊是cout,cout這里就是屏幕。給屏幕東西,專業(yè)的說(shuō)法就是:輸出到屏幕。
<P><IMG height=65 src="教學(xué)--第四章 數(shù)據(jù)類型.files/ls04_1.gif" width=229 border=0>
<P>圖示為:將 "Size of char is : " 輸出到屏幕,當(dāng)然,一對(duì)雙引號(hào)是不會(huì)被輸出的,因?yàn)樗鼈冇脕?lái)表示這是一句話。
<P>cout 不僅可以輸出一句話(字符串),而且可以用來(lái)輸出各種C/C++基本類型的數(shù)據(jù)。并且,通過(guò)
<<,它可以一個(gè)接一個(gè)地輸出所需內(nèi)容。在上面的那行代碼中,它首先輸出:"Size of char is : ";然后是輸出
sizeof(char)的計(jì)算結(jié)果。最后輸出 endl。 endl 表示換一新行(回車換行)。
<P> 理解了 cout
部分,那一行代碼中我們惟一不明白就是行末的那個(gè)分號(hào)了。是啊你看到了沒(méi),所有C/C++語(yǔ)句行都在語(yǔ)句后有一個(gè)';'。當(dāng)然,和其它C++語(yǔ)句的主要組成部分一樣,它必須是英文符號(hào)。如果你打入一個(gè)中文的符號(hào)。現(xiàn)在改還來(lái)得及。并且從此刻起就記住了,所有C++語(yǔ)句中用到標(biāo)點(diǎn)符號(hào),除非是指定就要用中文作為輸出等參數(shù),否則,分號(hào),逗號(hào),冒號(hào),感嘆號(hào),問(wèn)號(hào)等等,全都必須是英文的。
<P>現(xiàn)在,你可以把放心地把那句話原樣照敲入你的代碼中了。不過(guò),聰明的學(xué)員已經(jīng)完成“Ctrl + C"/"Ctrl +
V"大法,直接粘貼了。不過(guò),我想,如果你真的以前還沒(méi)寫過(guò)C/C++代碼,還是動(dòng)手輸入。
<P>
<P>按F9編譯,運(yùn)行。結(jié)果如圖:
<P><IMG height=95 src="教學(xué)--第四章 數(shù)據(jù)類型.files/ls04.h1.gif" width=236 border=0>
<P>
<P>"Size of char is : 1 "中,最后的那個(gè)1就是 sizeof(char)的計(jì)算結(jié)果。
<P>至于那個(gè)endl呢?你看,光標(biāo)不是在下一行的行首閃爍嗎?如果你把代碼改成這樣:
<P><B>cout << "Size of char is : " << sizeof(char); </B>
<P>那么,輸出結(jié)果幾乎一模一樣,除了光標(biāo)改成在行末。 我們之所以需要換行,是因?yàn)楹竺孢€要輸出。
<P>
<P>你可能喜歡用中文來(lái)輸出?好吧。
<P><B>cout << "char(字符)占用的字節(jié)數(shù): " << sizeof(char) <<
endl;<BR></B> 結(jié)果是:
<P><IMG height=95 src="教學(xué)--第四章 數(shù)據(jù)類型.files/ls04.h2.jpg" width=324 border=0>
<P>我默認(rèn)不采用中文的原因只是因?yàn)閷W(xué)生容易在切換中英輸入法的關(guān)節(jié)出錯(cuò),結(jié)果在不該使用中文的時(shí)候輸入了一些中文字符,造成無(wú)謂的錯(cuò)誤,白白浪費(fèi)學(xué)習(xí)時(shí)間。
<P>
<P>再接再厲,我們輸出所有語(yǔ)句。包含我們用typedef自定義了數(shù)據(jù)類型的別名。
<P>……
<P>int main(int argc, char* argv[])
<P>{
<P> typedef int AGE; //為int 取一個(gè)別名
<P>
<P> //cout << "char(字符)占用的字節(jié)數(shù): " << sizeof(char)
<< endl;
<P> cout << "Size of char is : " << sizeof(char)
<< endl;
<P> cout << "Size of unsigned char is : " <<
sizeof(unsigned char) << endl;
<P>
<P> cout << "Size of short int is : " <<
sizeof(short int) << endl;
<P> cout << "Size of unsigned short int is : " <<
sizeof(unsigned short int) << endl;<BR>
<P> cout << "Size of int is : " << sizeof(int)
<< endl;
<P> cout << "Size of unsigned int is : " <<
sizeof(unsigned int) << endl;<BR>
<P> cout << "Size of long int is : " <<
sizeof(long int) << endl;
<P> cout << "Size of unsigned long int is : " <<
sizeof(unsigned long int) << endl;<BR>
<P> cout << "Size of AGE is : " << sizeof(AGE)
<< endl;<BR>
<P> cout << "Size of float is : " << sizeof(float)
<< endl;
<P> cout << "Size of double is : " <<
sizeof(double) << endl;
<P> cout << "Size of long double is : " <<
sizeof(long double) << endl;
<P> cout << "Size of bool is : " << sizeof(bool)
<< endl;
<P>
<P> getchar();
<P>
<P> return 0;
<P>}
<P>為了看著清楚,我加了一些空行。
<P>我很樂(lè)意承認(rèn),這回我也當(dāng)了一次聰明人。寫完成上面的代碼過(guò)程中,一直在用“Ctrl + C”和“Ctrl +
V”。關(guān)鍵是復(fù)制完之后要及時(shí)改變需要變的地方。
<P>另外,檢查是否改錯(cuò)的一個(gè)方法就是利用CBC的代碼窗口對(duì)關(guān)鍵字變色的特征。sizeof 本身和
sizeof()括號(hào)中的數(shù)據(jù)類型關(guān)鍵字都會(huì)變色。如果你發(fā)現(xiàn)有一處不是這樣,那你一定是輸入錯(cuò)了。比如你把sizeof(char)寫成
sizeof(cahr)。那么,cahr不會(huì)變色。
<P>我們漏了一個(gè)類型:void。void
是無(wú)類型。sizeof無(wú)法對(duì)無(wú)類型取其字節(jié)數(shù)。這是void的特殊性。當(dāng)作為“無(wú)類型”意義時(shí),它字大小是0字節(jié),如函數(shù)的返回值。當(dāng)作為“未確定”的意義時(shí),它的大小也是未確定的。當(dāng)然,這也是sizeof的一知識(shí)點(diǎn):它的計(jì)算對(duì)像必須確定的類型。
<P>
<P>確保輸入無(wú)誤。F9。結(jié)果如下:
<P><IMG height=287 src="教學(xué)--第四章 數(shù)據(jù)類型.files/ls04.h5.jpg" width=436
border=0>
<P>
<P>“這一章好長(zhǎng)。這一夏好熱!要收多少個(gè)學(xué)員的20元錢,才能省下錢買空調(diào)呢?”我把鍵盤往前一推,長(zhǎng)吁一口氣,幽幽地想。
<P>最終我決定到樓下買根冰棍。 </P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A
href="http://d2school.com/bcyl/bhcpp/newls/ls04.htm#頁(yè)首">到頁(yè)首</A>]</P></BODY></HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -