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