资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2,第3章,数据类型,_简单数据类型,本章目录,3.1,C+,的字符集,3.2,标识符和关键字,3.3,数据类型,简单数据类型,(,一,),数组,(,二,),指针,(,三,),引用,(,四,),数据是程序处理的基本对象,在程序中每种数据都应有确定的类型,每种数据类型的变量都有确定的存储长度、取值范围及允许的操作。,3.C+的字符集(CHARACTERSET),每种语言都使用一组字符构造程序的基本单元,C+的字符集由下列字符组成:,大小写英文字母和,数字字符,其他字符 *,._:;?“|!#%&()(,空格,),等,3.标识符和关键字,(IdentifiersandReserved words),程序设计语言中为变量、常量、类型、函数等,取的名字称为标识符。,标识符由大小写字母、数字和下划线组成,并,且只能以字母或下划线开始。,关键字是编译器已预定义好的,具有特定含义,的标识符,也称为保留字。,C+保留字,auto break case char const continue default do double else enum extern float for,goto if int long register return short signed,sizeof static,struct switch,typedef,union,unsigned void volatile while,bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace,new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t,asm cdecl far huge interrupt near pascal,export except fastcall saveregs stdcall seg,syscall fortran thread,红色,:C的32个关键字,黄色,:C+补充的29个关键字,白色:BC和VC扩充的保留字,下列变量名哪些合法?,Way_cool myCar,case Bits32,Iptr cout,A Lot -vv,switch While,52select while,3.数据类型,程序中数据分为变量或常量,每个变量或常量都有确定的数据类型。,空类型void,数组type,指针type*,引 用 type&,结构struct,联合union,枚举enum,类class,数据类型,基本数据类型,非基本数据类型,用于定义基于基本数据类型和外部数据类型,外部,数据,类型,整型int,字符型,实型,逻辑型bool,单精度型float,双精度型double,单字符型char,宽字符型w_char,注:黄色标识的类型是C+中有而C没有的,其他两者皆有,类型修饰符,short(int)long(int,double),signed,unsigned(char,int),类型定义typedef,为已有类型名取一个新名字。,typedef int integer;,integer a;/等价于 int a;,整型,整数在计算机中的存储形式:二进制补码,整数的表示范围:见P67表3-2,整数的类型:,signed,unsigned(,char,short int,int,long int,),存储长度满足char=short int=int=long int,注:长整数表示为 123,l,123,L,无符号整数表示为 123,u,例如:b=02345L;,c=235u+123u;,整型常数即整型常量,(,整数字面值),有三种表示方法:,十进制整数,123,,,-784,八进制整数,0123=,十六进制整数,注,:,八进制和十六进制只能表示正整数,例如,:,int,a=23;,long,int,b=02345;,unsigned,int,c=0 x79fa;,),83,(,),123,(,10,8,=,),291,(,),123,(,123,0,10,16,=,=,x,3.3.2 整数子类型,1、字符型,2、枚举型,3、布尔型(C+才有的类型),1、字符型(char),字符的表示,单引号括起的字符,称为字符常量。,如:a,9,+,字符的存储:1个字节(256种状态:对于signed char,此类型的0127用于ASCII编码,-1-128表示非正常状态;对于unsigned char 而言,此类型表示的整数范围为0255)。,由于char是int的子集,所以char数据可以参与到整数的运算中去,但是在输出上还是按本身类型输出。,int a=b;,char c=97;,int x=a+a;/x=98+7=105,coutaendl;/输出:98,coutcendl;/输出:a,转义字符表示控制字符或具有特定用途的字符,a 0 x07 响铃 0 x27单引号,n 0 x0A换行 ddd 13位八进制数,t 0 x09 制表符 xhh 12位十六进制数,0 x5c 反斜杠字符,”0 x22 双引号,字符变量的初始化,char a=007,b=r,c=xab;,2、枚举型(enum Type)/应用举例:,获取当前系统时间,枚举型是对整数区间的自定义类型,用户须为区间中的值取名。,enum color RED,BLUE,GREEN,WHITE,BLACK;,Color是自定义的枚举类型。,枚举成员RED,BLUE,GREEN等都是符号常量,枚举成员值按序初始化为0N。上例中REDBLACK的值分别为0。,在定义枚举类型时也可为其成员指定枚举值 :,enum colorRED,BLUE=100,GREEN,WHITE,BLACK;,此时,RED 为0,BLUEBLACK分别为100 103。,一旦定义了枚举类型,该类型的变量的取值范围也确定了,即其变量只能取花括号中的枚举值。,color point=GREEN;正确,color point=YELLOW;错误,虽然枚举值对应整数,但是枚举变量却不能取得整数值。,例如:color c=0;/error:0是非枚举类型(虽然RED代表整数0),枚举类型的作用:一般作为整数常量使用。,3、布尔型(bool)C+中的类型,bo,ol型变量只有true和false两个逻辑值,在编译系统中,其定义相当于,enum bool false,true;,由于bool型是整数的子类型,所以可以用任何整数给bool型变量赋值,但是任何非0整数给bool型变量赋值时,其值都为1,非整数的其他类型也一样,总之,只要非0,其值都为1。,bool a=3;/a为ture,bool b=1;/b为ture,bool c=a+b;/c为ture,bool d=true;/d为ture,bool e=a-b;/e为false,完整的例子,注意:bool是C+中的类型,C语言中没有此类型,但是C中有BOOL,使用BOOL需要包含头文件,在C中使用BOOL的完整的例子,3.3.3 浮点型,实数,也称浮点数,有float,double和long double三种类型,实型常量在书写时,默认为double类型,若要表示float类型,要在其后加上F或f。,float f1=19.2f;,float f2=0.192e+02;/将double类型的值转换成float,double d1=19.2;,double d2=0.192e+02f;/将float类型的值转换成double,long double ld1=19.2L;,long double ld2=0.192e+02;,/将double类型的值转换成long double,两种表示方法:,()定点数形式1.123,3.1415;,()科学计数法形式 123e5,123E5都表示,有效位,float(4字节)7位,double(8字节)15位,long double (10字节)19位,3.3.4 C-串与string,在C+中表示字符串的类型有以下三种,C+,字符指针 char*,字符数组 char ,字符串 string,沿袭C,C不支持,1、字符指针与字符串,(,1)字符串常量,由一对双引号括起的字符序列称为字符串常量。,“How do you do?”,“china”,字符串常量以0结束。,字符串常量通常存放在data area 的const 区中,并以0作为结束符,编译器记下其起始地址.即:地址代表了这个字符串常量。,c,h,i,n,0,a,由于字符串常量的地址属性,所以由相同字符组成的字符串常量是两个不同起始地址的字符串常量。,例如:/f0303.cpp,#include,using namespace std;,int main(),cout(“join”=“join”?“”:”not”)“equaln”;,char*str1=“good”;,char*str2=“good”;,cout(str1=str2?“”:“not”)“equaln”;,char buffer16=“Hello”;,char buffer26=“Hello”;,cout(buffer1=buffer2?“”:“not”)“equaln”;,not equal,not equal,not equal,(2)字符数组,数组中每个元素为字符的数组称为字符数组,字符数组可用单个字符常量初始化,也可用字符串常量初始化,例如:,char buffer=“hello”;,char buffer=h,e,l,l,o,0,定义数组时可以指定元素个数,也即数组的大小;一旦指定了元素个数,则给数组赋值的元素个数一定要小于等于指定的个数。,如:,char buffer7=“hello!”;/right,char buffer6=“hello!”;/error,(3)字符指针,指向字符类型的指针称为字符指针。如:,char*str=“abc”;,字符串常量和字符数组名都具有地址特性,当把它们赋给一个字符指针后,编译器规定:,输出字符指针就是输出字符串;,输出字符指针指向的对象(*),就是输出单个字符。,二者等价,例如:,#include,using namespace std;,void main(),char buffer10=“ABC”;,char*pc;,pc=“hello”;,coutbufferendl;/输出ABC,coutpcendl;/输出hello,pc+;,coutpcendl;/输出ello,cout*pcendl;/输出e,pc=buffer;,coutpc;/输出ABC,()字符数组和字符指针的区别,字符数组也是字符指针,但是是字符指针常量,即const char*类型,也即字符数组一旦定义好,字符数组名是不能被重新赋值的,而这里的字符指针类型char*用来定义字符指针变量,它被赋值后是可以再次赋值的,访问单个字符的方式不一样,字符数组采用数组名加下标的方式,字符指针采用字符指针加*的方式,例如:,#include,using namespace std;,void main(),char buffer10=“ABC”;,char*pc=“hello”;,coutbufferendl;/输出ABC,coutpcendl;/输出hello,pc=“hi”;/right,coutpc;/输出hi,buffer=“hi”;/error,coutbuffer2endl;/输出C字符,cout*pcendl;/输出h字符,字符串输出,调用格式:,C+:cout 字符串;,
展开阅读全文