1、第第3 3章章 C+C+基本语法基本语法 第1页主要内容13.1 3.1 数据类型数据类型 23.2 3.2 常量和变量常量和变量 33.3 3.3 运算符和表示式运算符和表示式43.4 3.4 语句语句 53.5 3.5 小结小结第2页3.1 数据类型n程序中各种加工和处理都是针对一些数程序中各种加工和处理都是针对一些数据进行,这些数据由数据类型描述。据进行,这些数据由数据类型描述。数据类型要求了数据存放结构(在内数据类型要求了数据存放结构(在内存中占据大小和布局)、能够进行运存中占据大小和布局)、能够进行运算、取值范围。算、取值范围。C+C+中数据类型大致分为三类:中数据类型大致分为三类:
2、C+C+预定义一组内置基本数据类型,表示常预定义一组内置基本数据类型,表示常见简单数据,如整数、浮点数等;见简单数据,如整数、浮点数等;复合类型,由基本数据类型组合而成更复复合类型,由基本数据类型组合而成更复杂数据类型,如数组、结构体、联合、枚杂数据类型,如数组、结构体、联合、枚举等;举等;类类型,即用户自己定义抽象数据类型。类类型,即用户自己定义抽象数据类型。为了方便程序员,为了方便程序员,C+C+标准库中还提供一些标准库中还提供一些惯用抽象数据类型。惯用抽象数据类型。2常量和变量3运算符和表示式4语句5小结数据类型1第3页3.1.1 内置数据类型n字符类型字符类型字符型字符型charcha
3、r,通惯用来表示单个字符和小整数。,通惯用来表示单个字符和小整数。n整数类型整数类型整型整型intint、短整型、短整型shortshort、长整型、长整型longlong,分别代表不,分别代表不一样长度整数值一样长度整数值charchar、shortshort、intint和和longlong类型都能够用类型都能够用signedsigned和和unsignedunsigned修饰修饰n浮点类型浮点类型浮点型浮点型floatfloat、双精度浮点型、双精度浮点型doubledouble和长双精度和长双精度long doublelong doublen布尔类型布尔类型boolbool类型只有两个
4、值:类型只有两个值:truetrue和和falsefalse。-nboolbool类型、类型、charchar类型、各种整数类型通称为类型、各种整数类型通称为整值类型。整值类型和浮点类型一起被称为整值类型。整值类型和浮点类型一起被称为算术类型。算术类型。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第4页内置数据类型空间大小 n标准标准C+C+对内置数据类型空间大小并没有做出对内置数据类型空间大小并没有做出严格要求,严格要求,但为了编写可移植代码,应该了但为了编写可移植代码,应该了解你所使用编译器和机器,防止对这些特征解你
5、所使用编译器和机器,防止对这些特征做出某种假定。做出某种假定。n以下代码能够测试以下代码能够测试C+C+编译器为每种数据类型编译器为每种数据类型分配空间大小:分配空间大小:2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型#include using namespace std;int main()cout sizeof(char)endl;cout sizeof(int)endl;cout sizeof(float)endl;cout sizeof(double)endl;cout sizeof(bool)endl;retu
6、rn 0;Visual C+6.0和和DEV-C+结结果:果:14481第5页3.1.2 指针类型 n指针持有一个对象地址,经过指针能够间接指针持有一个对象地址,经过指针能够间接操作这个对象。指针经典使用方法操作这个对象。指针经典使用方法:构建链式数据结构,如链表和树管理程序执行时动态分配对象作为函数参数n每个指针都有相关类型,需要在定义指针时每个指针都有相关类型,需要在定义指针时指出。不一样类型指针表示方法和保留地址指出。不一样类型指针表示方法和保留地址值并没有分别,区分只是在于指针指向对象值并没有分别,区分只是在于指针指向对象类型不一样。指针类型指出了怎样解释该内类型不一样。指针类型指出了
7、怎样解释该内存地址保留内容,以及该内存区域应该有多存地址保留内容,以及该内存区域应该有多大。比如:大。比如:int*pi;/int*pi;/指向整型指针,如指向内存地址指向整型指针,如指向内存地址是是10001000,则跨越地址空间是,则跨越地址空间是1000100010031003 char*pc;/char*pc;/指向字符型指针,如指向内存地指向字符型指针,如指向内存地址是址是10001000,则只占据,则只占据10001000这个字节区域这个字节区域2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第6页空指针n指针值
8、为指针值为0 0时表示它不指向任何对象,时表示它不指向任何对象,即空指针。指针不能保留非地址值,即空指针。指针不能保留非地址值,也不能被赋值或初始化为不一样类型也不能被赋值或初始化为不一样类型地址值。地址值。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int ival=100;int*pi=&ival;/pi 被初始化为ival地址int*pi2=0;/pi2不指向任何对象pi2=ival;/编译错误double dval=1.5;pi=&dval;/编译错误第7页通用指针nC C+提提供供了了一一个个通通用用指指针针,
9、即即v vo oi id d*指指针针,它它能能够够持持有有任任何何类类型型地地址址值值。不不能能操操纵纵v vo oi id d指指针针指指向向对对象象,只只能能传传送送该该地地址址值值或或和和其其它它地地址址进进行行比比较较。C C+也也不不允允许许v vo oi id d指指针针 到到 其其 它它 类类 型型 指指 针针 直直 接接 赋赋 值值。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int a=10;char ch=k;void*pv=&a;/OKpv=&ch;/OKint*pi=pv;/错误,应该使用pi=
10、(int*)pvn经过解引用操作(经过解引用操作(*)能够间接访问指针指)能够间接访问指针指向对象。向对象。int x=100,y=20;int*pi=&x;*pi=y;/x=y第8页指针算术运算n指针能够进行加或减整数值算术运指针能够进行加或减整数值算术运算,这时地址值增加数目取决于指算,这时地址值增加数目取决于指针类型。指针只有在指向数组元素针类型。指针只有在指向数组元素时,其算术运算才有意义。时,其算术运算才有意义。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int a=10;char ch=k;int*pi=&a
11、;char*pc=&ch;pi+;/在原地址值上加在原地址值上加4;因为;因为int占占4个字节个字节pc+;/在原地址值上加在原地址值上加1;因为;因为char占占1个字节个字节第9页3.1.3 引用类型n引用又称为别名,它能够作为对象另一引用又称为别名,它能够作为对象另一个名字。经过引用我们能够间接操纵对个名字。经过引用我们能够间接操纵对象,使用方式类似于指针,不过不需要象,使用方式类似于指针,不过不需要指针语法。在程序中,引用主要用作函指针语法。在程序中,引用主要用作函数数形参形参。n引用由类型标识符和一个取地址符(引用由类型标识符和一个取地址符(&)来定义,引用必须被初始化。来定义,引
12、用必须被初始化。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int ival=100;/OK,refVal是指向是指向ival引用引用int&refVal=ival;/Error,引用没有初始化引用没有初始化int&refVal2;/Error,不能用对象地址来初始化引用,不能用对象地址来初始化引用int&refVal3=&ival;int&refVal4=10;/Error,不能用没有内存地址数值来初始化引用不能用没有内存地址数值来初始化引用第10页引用注意事项(1)n引用一旦定义,就不能再指向其它对象,引用一旦定义,
13、就不能再指向其它对象,对引用全部操作都会被应用在它所指对引用全部操作都会被应用在它所指向对象上。比如:向对象上。比如:int x=100,y=20;int x=100,y=20;int&r=x;int&r=x;/r/r是是x x引用引用 r=y;r=y;/r/r不是不是y y引用,而是引用,而是x=yx=y2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第11页引用注意事项(2)n注意引用初始化和赋值极为不注意引用初始化和赋值极为不一样:初始化时引用一样:初始化时引用“指向指向”一个对象,赋值时,引用被作一个对象,赋值时,引
14、用被作为所指对象别名。为所指对象别名。n虽然虽然C+C+标准没有要求引用实标准没有要求引用实现方式,不过在很多现方式,不过在很多C+C+编译器编译器中,引用被实现为与所指对象中,引用被实现为与所指对象占据同一地址空间,比如下面占据同一地址空间,比如下面代码:代码:#include using namespace std;int main()int a=10;int&ra=a;couta=at&a=&aendl;coutra=rat&ra=&raendl;ra=20;couta=at&a=&aendl;coutra=rat&ra=&raendl;在在GNU C+编译环境编译环境输出结果以下:输出
15、结果以下:a=10&a=0 x22ff34ra=10&ra=0 x22ff34a=20&a=0 x22ff34ra=20&ra=0 x22ff342常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第12页引用与指针差异(1)n定义与初始化定义与初始化指针定义形式:类型*指针变量;指针初始化:int x=10,y=20;int*pi;/能够不初始化pi=&x;/p 指向int 类型对象xpi=&y;/p 也能够重新指向y引用定义形式:类型&引用名=初始值;引用初始化:定义引用时必须用有内存地址对象初始化。引用在初始化之后,一直指
16、向该对象。比如:int a=10,b=20;int&ri=a;/必须初始化ri=b;/等同于a=b;2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第13页引用与指针差异(2)n使用方式使用方式指针经过解引用(*)运算间接访问指向对象;引用作为对象别名,能够直接访问对象。比如:pi=&x;*pi=30;/x=30int&ri=a;ri=40;/a=402常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第14页引用与指针差异(3)n指针能够不指向任何对象,引用
17、必指针能够不指向任何对象,引用必须指向一个对象。须指向一个对象。pi=0;/pi是空指针,不指向任何对象ri=0;/a=02常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第15页引用与指针差异(4)n指针之间相互赋值会改变指向关系;指针之间相互赋值会改变指向关系;引用之间相互赋值是它们指向对象引用之间相互赋值是它们指向对象之间赋值,引用关系本身并不改变。之间赋值,引用关系本身并不改变。int x=100,y=20;int*p1=&x,*p2=&y;p1=p2;/p1=&y,p1 和p2 都指向yint&r1=x,&r2=y;
18、r1=r2;/x y,r1 仍是x 引用2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第16页3.1.4 数组n数组是一个单一数据类型对象集合。数组是一个单一数据类型对象集合。其中单个对象没有命名,但能够经其中单个对象没有命名,但能够经过它在数组中位置进行访问,即下过它在数组中位置进行访问,即下标访问。比如:标访问。比如:/ia/ia是包含是包含1010个个intint对象数组对象数组 int ia10;int ia10;/数组中下标为数组中下标为3 3元素被赋值为元素被赋值为7 7 ia3=7;ia3=7;2常量和变量3
19、运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第17页定义数组n定定义义数数组组时时需需要要指指定定类类型型名名、数数组组名名标标识识符符和和数数组组大大小小。数数组组大大小小是是一一个个大大于于1 1常常量量表表示示式式。数数组组元元素素下下标标从从0 0开开始始,到到数数组组大大小小1 1。不不过过,C C+并并不不提提供供对对数数组组下下标标范范围围检检验验,需需要要程程序序员员自自己己确确保保正正确确性性。n定义数组同时能够对数组进行初始化,定义数组同时能够对数组进行初始化,初始值放在花括号中,用逗号隔开。初始值放在花括号中,用
20、逗号隔开。int ia3=1,2,3;int ia3=1,2,3;int ib=4,5,6,7;int ib=4,5,6,7;int ic10=0,1,2;int ic10=0,1,2;2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第18页数组注意事项n一个数组不能被另一个数组初始化,一个数组不能被另一个数组初始化,也不能被直接赋值给另一数组。也不能被直接赋值给另一数组。C+C+也不允许申明一个引用数组,比如:也不允许申明一个引用数组,比如:int ia3=1,2,3;int ia3=1,2,3;int ib=ia;/!E
21、rror int ib=ia;/!Error int&ria=ia;/!Error int&ria=ia;/!Error int ival1=0,ival2=1;int ival1=0,ival2=1;int&r2=a,b;/!Error int&r2=a,b;/!Error int&rv1=ival1,&rv2=ival2;int&rv1=ival1,&rv2=ival2;int rv2=rv1,rv2;/OK int rv2=rv1,rv2;/OK2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第19页C格调字符串nC+
22、C+保留了保留了C C语言中用字符数组表示语言中用字符数组表示字符串方式,称为字符串方式,称为C C格调字符串。能格调字符串。能够经过库函数对这么字符串进行操够经过库函数对这么字符串进行操作。作。n需要包含标准库头文件需要包含标准库头文件2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第20页多维数组n定义多维数组,每一维大小由一对定义多维数组,每一维大小由一对方括号指定。比如:方括号指定。比如:int ia43;int ia43;n访问多维数组元素要指定每一维下访问多维数组元素要指定每一维下标。比如:标。比如:ia12=5
23、;ia12=5;n多维数组也能够被初始化:多维数组也能够被初始化:int ia32=int ia32=0,1,0,1,2,3,2,3,4,5 4,5 ;2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第21页数组与指针n数组名字代表数组第一个元素地址,它类数组名字代表数组第一个元素地址,它类型是数组元素类型指针。比如对下面数组型是数组元素类型指针。比如对下面数组定义:定义:int ia5;int ia5;niaia是一个是一个int*int*类型,类型,iaia和和&ia0&ia0都表示都表示第一个元素地址。因而,除了使用下
24、标访第一个元素地址。因而,除了使用下标访问数组元素之外,还能够使用指针对数组问数组元素之外,还能够使用指针对数组进行访问。进行访问。int main()int main()int a10;int a10;int i;int i;int*p;int*p;for(i=0;i 10;i+)ai=i;for(i=0;i 10;i+)ai=i;for(p=a;p a+10;p+)cout*p;for(p=a;p a+10;p+)cout”运运算算符符选选择择。定定义义结结构构体体类类型型之之后后,能能够够创创建建该该类类型型许许多多实实例例。n比如:比如:2常量和变量3运算符和表示式4语句5小结数据类型
25、1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型struct X char c;int i;float f;double d;X s1,s2;X*ps=&s1;s1.c=a;s1.i=1;s1.f=3.5;s1.d=0.7s2.c=ps-c;第23页结构体变量内存中大小(1)n结构体变量组员在内存中依次存放,因而,结构体变量组员在内存中依次存放,因而,标准上,结构体变量在内存中大小是其全标准上,结构体变量在内存中大小是其全部组员大小之和。不过,为了提升访问效部组员大小之和。不过,为了提升访问效率,大多数编译器实际上都使用了边界对率,大多数编译器实际上都使用了边界对齐技术。
26、齐技术。struct Y struct Y char c;char c;int i;int i;Y st;Y st;n上面变量上面变量stst在内存中占据几个字节呢?是在内存中占据几个字节呢?是5 5吗?吗?2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第24页结构体变量内存中大小(2)内内存存地地址址1000开开始始一一个个机机器器字字内内存存地地址址1004开开始始一一个个机机器器字字内内存存地地址址1008开始开始 st.c占一个字节占一个字节st.i占占一一个个完完整整机器字机器字为为了了边边界界对对齐齐而而空空出
27、来出来3个字节个字节st占占8个个字节字节2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型在在GCC编译器下,编译器下,sizeof(Y)结果是结果是8。第25页3.1.6 联合(共用体)nunionunion和和structstruct语法类似,只是数据组员语法类似,只是数据组员存放方式不一样。存放方式不一样。unionunion每个组员都是从每个组员都是从联合变量首地址开始存放,所以每次只能联合变量首地址开始存放,所以每次只能使用一个组员。使用使用一个组员。使用unionunion能够节约空间,能够节约空间,不过轻易犯错
28、。不过轻易犯错。union Packed union Packed char c;char c;int i;int i;float f;float f;double d;double d;/联合大小是其中联合大小是其中doubledouble大小大小 /因为因为doubledouble是占据空间最大元素是占据空间最大元素 Packed x;Packed x;x.c=a;/x.c=a;/其余组员现在不可使用其余组员现在不可使用 x.d=3.14;x.d=3.14;/覆盖了组员覆盖了组员c c内容内容2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体
29、 联合 枚举 类类型第26页联合内存布局2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型x.dx首地址首地址x.cx.fx.i第27页3.1.7 枚举n枚举定义了一组命名整数常量,从而提升代码可枚举定义了一组命名整数常量,从而提升代码可读性。比如:读性。比如:enum ShapeType circle,square,rectangle;enum ShapeType circle,square,rectangle;ShapeTypeShapeType枚举类型定义了枚举类型定义了3 3个常量:个常量:0 0,1 1,2 2 分别
30、和分别和名字名字circlecircle,squaresquare以及以及rectanglerectangle关联。关联。ShapeTypeShapeType是一个枚举类型,能够用它来定义枚举变量,变量值是一个枚举类型,能够用它来定义枚举变量,变量值只能是枚举组员。只能是枚举组员。n也能够自己指定枚举组员值:也能够自己指定枚举组员值:enum ShapeTypecircleenum ShapeTypecircle10,square10,square20,rectangle;20,rectangle;未指定值枚举组员,编译器会赋给它相邻下一个整数未指定值枚举组员,编译器会赋给它相邻下一个整数值,
31、所以值,所以rectanglerectangle组员值是组员值是2121。n枚举类型在必要时,如参加算术运算,会被自动枚举类型在必要时,如参加算术运算,会被自动提升为算术类型。枚举组员名字是不可打印,输提升为算术类型。枚举组员名字是不可打印,输出是它所表示整数值。另外,不能使用枚举组员出是它所表示整数值。另外,不能使用枚举组员进行迭代,进行迭代,C+C+不支持枚举组员之间前后移动。不支持枚举组员之间前后移动。2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第28页3.1.8 类类型n除了内置类型和复合类型之外,除了内置类型和
32、复合类型之外,C+C+还还允许用户自己定义类类型,而且在标准允许用户自己定义类类型,而且在标准库中预定义了一些惯用类型。这里先简库中预定义了一些惯用类型。这里先简单介绍几个惯用标准类型。单介绍几个惯用标准类型。输入输出流输入输出流iostream iostream 字符串类字符串类 标准数组标准数组向量类向量类 2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第29页输入输出流iostreamn输入输出操作是由输入输出操作是由iostreamiostream类提供,使类提供,使用用iostreamiostream需包含标准库
33、头文件:需包含标准库头文件:#include#include niostreamiostream库中有两个预定义对象:库中有两个预定义对象:cincin,istreamistream类型对象,用于从用户终类型对象,用于从用户终端读入数据。端读入数据。cincin惯用方式为:惯用方式为:cin cin 变量名变量名;cin cin 变量名变量名1 1 变量名变量名2;2;cin cin 变量名变量名1 1 变量名变量名2 2 变量名变量名n n;coutcout,ostreamostream类型对象,用于向用户终类型对象,用于向用户终端写数据。端写数据。cout cout 惯用方式为:惯用方式为
34、:cout cout 表示式表示式;cout cout 表示式表示式 endl;endl;cout cout 表示式表示式1 1 表示式表示式2 2 表示式表示式n;n;2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第30页输入输出流iostream#include#include using namespace std;using namespace std;int main()int main()int ival;int ival;float fval;float fval;cin ival;cin ival;cin
35、fval;cin fval;cout ival n;cout ival n;cout fval endl;/endlcout fval ival fval;cin ival fval;cout ival n fval endl;cout ival n fval endl;2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第31页字符串类stringn除除了了保保留留C C格格调调字字符符串串c ch ha ar r*之之外外,C C+标标准准库库还还定定义义了了字字符符串串类类s st tr ri in ng g。s st t
36、r ri in ng g类类支支持持字字符符串串对对象象各各种种初初始始化化方方式式,支支持持字字符符串串之之间间拷拷贝贝、比比较较和和连连接接等等操操作作,还还支支持持对对字字符符串串长长度度查查询询和和是是否否为为空空判判断断,而而且且也也能能够够访访问问字字符符串串中中单单个个字字符符。使使用用s st tr ri in ng g类类,需需要要包包含含对对应应头头文文件件:s st tr ri in ng g。#include#include 2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第32页字符串类string
37、#include#include using namespace std;int main()string s1,s2;/创建两个空字符串对象 string s3=Hello,World!;/初始化s3 string s4(I am);s2=“Today”;/赋值 s1=s3+s4;/字符串连接 s1+=5;/末尾追加 cout s1+s2+!endl;/输出字符串内容 cout Length of s1 is:s1.size()endl;/输出字符串长度 for(int i=0;I s1.size();+i)cout s1i ;/逐一输出s1中字符2常量和变量3运算符和表示式4语句5小结数据
38、类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第33页字符串类stringn字符串比较使用运算符字符串比较使用运算符“=”=”n取得字符串长度使用取得字符串长度使用size()size()n判断字符串是否为空使用判断字符串是否为空使用empty()empty()n能够将一个能够将一个C C格调字符串赋给格调字符串赋给stringstring对象,对象,但反之不可。但反之不可。n要将要将stringstring对象转换为对象转换为C C格调字符串,使用格调字符串,使用c_strc_str()()操作,其返回结果为操作,其返回结果为const char*const ch
39、ar*,即转,即转换得到换得到C C格调字符串首地址。比如:格调字符串首地址。比如:string s1=“This is a book.”;string s1=“This is a book.”;int x=strlen(s1);int x=strlen(s1);/Error/Errorx=strlen(s1.c_str();x=strlen(s1.c_str();/OK/OK2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第34页标准数组向量类nC+C+标标准准库库中中vectorvector类类为为内内置置数数组组类类提
40、提供供了了一一个个替替换换表表示示。为为了了使使用用vectorvector,我我们们 必必 须须 包包 含含 相相 关关 头头 文文 件件:vectorvector。vectorvector能能够够像像数数组组一一样样使使用用,还还能能够够以以STLSTL方式使用。方式使用。/数组习惯#include using namespace std;int main()vector iv(10);int ia10;for(int id=0;id10;id+)iaid=ivid;/2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第3
41、5页向量类:STL使用习惯/STL习惯#include#include using namespace std;int main()vector iv;for(int id=0;id10;id+)iv.push_back(id);for(int id=0;idiv.size();id+)coutivid;/2常量和变量3运算符和表示式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型第36页3.2.1 内置数据类型文字常量 n当一个数值,比如当一个数值,比如5 5,出现在程序中时,出现在程序中时,它被称为文字常量(它被称为文字常量(literal lit
42、eral constantconstant)。)。n“文字文字”是因为只能以它值形式指代它。是因为只能以它值形式指代它。n“常量常量”是因为它值不能被改变。是因为它值不能被改变。n文字常量是文字常量是不可寻址不可寻址。每个文字常量都。每个文字常量都有对应类型,其类型由其形式、取值和有对应类型,其类型由其形式、取值和后缀决定。后缀决定。3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第37页整数文字常量 n整数文字常量能够表示为十进制、八进制整数文字常量能够表示为十进制、八进制或十六进制形式。比如或十六进制形式。比如2323能够
43、写成:能够写成:23 /23 /十进制十进制 027 /027 /八进制八进制 0 x17 /0 x17 /十六进制十六进制n十进制整数文字常量默认类型是十进制整数文字常量默认类型是intint,假,假如数值超出如数值超出intint能够表示范围,那么其类能够表示范围,那么其类型是型是longlong。n八进制和十六进制整数文字常量类型是八进制和十六进制整数文字常量类型是intint、unsigned intunsigned int、longlong、unsigned longunsigned long中第一个范围足够表示该数值类型。中第一个范围足够表示该数值类型。n能够在文字常量后面加能够在
44、文字常量后面加“L”L”或或“l”l”后缀后缀将其指定为将其指定为longlong类型。能够加类型。能够加“U”U”或或“u”u”将其指定为无符号数。如:将其指定为无符号数。如:116u 120UL 2L116u 120UL 2L3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第38页浮点型文字常量n浮点型文字常量能够写成普通十进浮点型文字常量能够写成普通十进制形式或科学计数法形式。比如浮制形式或科学计数法形式。比如浮点数点数235.8235.8能够表示为:能够表示为:235.8 2.358E2 235.8 2.358E2 n
45、浮点型文字常量默认为浮点型文字常量默认为doubledouble类型,类型,也能够加后缀改变其类型。也能够加后缀改变其类型。nfloatfloat类型浮点文字常量能够在后面类型浮点文字常量能够在后面加加“F”F”或或“f”f”标示,后缀标示,后缀“L”L”或或“l”l”则为则为long doublelong double类型。类型。3.14F 1.24f 2.5E3L3.14F 1.24f 2.5E3L3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第39页布尔型文字常量nboolbool型型文文字字常常量量只只有有truet
46、rue和和falsefalse。3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第40页字符型文字常量n字字符符型型文文字字常常量量是是用用单单引引号号括括起起来来单单个个字字符符或或以以斜斜线线开开头头转转义义字字符符,如如aa,nn。n一些惯用转义字符如:一些惯用转义字符如:转义转义字符字符含含义义转义转义字符字符含含义义n换换行符行符r回回车键车键b退格退格键键a响响铃铃符符t水平制表水平制表键键v垂直制表垂直制表键键反斜杠反斜杠键键?问问号号键键单单引号引号键键双引号双引号键键ooo八八进进制数制数ooo hhh十六十
47、六进进制数制数hhh3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第41页字符串文字常量n在在程程序序中中经经常常出出现现还还有有用用双双引引号号括括起起来来字字符符序序列列,即即字字符符串串文文 字字 常常 量量,比比 如如 hello hello worldworld,其其默默认认类类型型是是constconst char*char*。3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第42页3.2.2 变量和标识符变量n变量为我们提供了一个有名字存放变量
48、为我们提供了一个有名字存放区,能够经过代码对其进行读、写区,能够经过代码对其进行读、写处理。处理。n变量有时也被称为对象。变量有时也被称为对象。n每个变量都有特定数据类型,这个每个变量都有特定数据类型,这个类型决定了相关内存类型决定了相关内存大小大小、布局布局、能够存放在该存放区值能够存放在该存放区值范围以范围以及能及能够应用在够应用在其上操作其上操作。n比如:比如:int count;int count;double salary;double salary;3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第43页3.2.2
49、 变量和标识符标识符n引引用用变变量量要要经经过过其其名名字字,而而变变量量由由标识符命名。标识符命名。n标标识识符符能能够够由由字字母母、数数字字以以及及下下划划线线组组成成,但但必必须须由由字字母母或或下下划划线线开开头头,而而且且区区分分大大小小写写字字母母。上上面面代代码中码中countcount和和salarysalary都是标识符。都是标识符。nC+C+保保留留了了一一些些词词用用作作关关键键字字,关关键键字不能作为程序标识符使用。字不能作为程序标识符使用。3运算符和表示式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词第44页C
50、+关键字asmasmautoautoboolboolbreakbreakcasecasecatchcatchcharcharclassclassconstconstconst_castconst_castcontinuecontinuedefaultdefaultdeletedeletedododoubledoubledynamic_castdynamic_castelseelseenumenumexplicitexplicitexportexportexternexternfalsefalsefloatfloatforforfriendfriendgotogotoif ifinlineinl