📄 教学--第四章 数据类型.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 + -