收藏 分销(赏)

C++语法大全.ppt

上传人:胜**** 文档编号:803211 上传时间:2024-03-22 格式:PPT 页数:141 大小:9.41MB
下载 相关 举报
C++语法大全.ppt_第1页
第1页 / 共141页
C++语法大全.ppt_第2页
第2页 / 共141页
C++语法大全.ppt_第3页
第3页 / 共141页
C++语法大全.ppt_第4页
第4页 / 共141页
C++语法大全.ppt_第5页
第5页 / 共141页
点击查看更多>>
资源描述

1、第3章 C+基本语法 主要内容13.1 3.1 数据类型数据类型 23.2 3.2 常量和变量常量和变量 33.3 3.3 运算符和表达式运算符和表达式43.4 3.4 语句语句 53.5 3.5 小结小结3.1 数据类型程序中的各种加工和处理都是针对某些数据进行的,这些数据由数据类型描述。数据类型规定了数据的存储结构(在内存中占据的大小和布局)、可以进行的运算、取值范围。C+中的数据类型大致分为三类:C+预定义的一组内置的基本数据类型,预定义的一组内置的基本数据类型,表示常见的简单数据,如整数、浮点数等;表示常见的简单数据,如整数、浮点数等;复合类型,由基本数据类型组合而成的更复合类型,由基

2、本数据类型组合而成的更复杂的数据类型,如数组、结构体、联合、复杂的数据类型,如数组、结构体、联合、枚举等;枚举等;类类型,即用户自己定义的抽象数据类型。类类型,即用户自己定义的抽象数据类型。为了方便程序员,为了方便程序员,C+标准库中还提供的标准库中还提供的一些常用的抽象数据类型。一些常用的抽象数据类型。2常量和变量3运算符和表达式4语句5小结数据类型13.1.1 内置数据类型字符类型字符型字符型char,通常用来表示单个字符和小整数。,通常用来表示单个字符和小整数。整数类型整型整型int、短整型、短整型short、长整型、长整型long,分别代表不,分别代表不同长度的整数值同长度的整数值ch

3、ar、short、int和和long类型都可以用类型都可以用signed和和unsigned修饰修饰浮点类型浮点型浮点型float、双精度浮点型、双精度浮点型double和长双精度和长双精度long double布尔类型bool类型只有两个值:类型只有两个值:true和和false。-bool类型、char类型、各种整数类型通称为整值类型。整值类型和浮点类型一起被称为算术类型。2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型内置数据类型的空间大小 标准C+对内置数据类型的空间大小并没有做出严格规定,但为了编写可移植的代码,应

4、该了解你所使用的编译器和机器,避免对这些特性做出某种假定。如下代码可以测试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;return 0;Visual C+6.0和和DEV-C+结结果:

5、果:144813.1.2 指针类型 指针持有一个对象的地址,通过指针可以间接操作这个对象。指针的典型用法:构建链式的数据结构,如链表和树管理程序执行时动态分配的对象作为函数的参数每个指针都有相关的类型,需要在定义指针时指出。不同类型的指针的表示方法和保存的地址值并没有分别,区别只是在于指针指向的对象类型不同。指针的类型指出了如何解释该内存地址保存的内容,以及该内存区域应该有多大。例如:int*pi;/指向整型的指针,如指向内存地址是1000,则跨越的地址空间是10001003 char*pc;/指向字符型的指针,如指向内存地址是1000,则只占据1000这个字节的区域2常量和变量3运算符和表达

6、式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型空指针指针值为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;/编译错误通用指针C+提供了一种通用指针,即void*指针,它可以持有任何

7、类型的地址值。不能操纵void指针指向的对象,只能传送该地址值或和其他地址进行比较。C+也不允许void指针到其他类型指针的直接赋值。2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int a=10;char ch=k;void*pv=&a;/OKpv=&ch;/OKint*pi=pv;/错误,应该使用pi=(int*)pvn通过解引用操作(通过解引用操作(*)可以间接访问指针指)可以间接访问指针指向的对象。向的对象。int x=100,y=20;int*pi=&x;*pi=y;/x=y指针的算术运算指针可以进行加或减整数值

8、的算术运算,这时地址值增加数目取决于指针的类型。指针只有在指向数组元素时,其算术运算才有意义。2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型int a=10;char ch=k;int*pi=&a;char*pc=&ch;pi+;/在原地址值上加在原地址值上加4;因为;因为int占占4个字节个字节pc+;/在原地址值上加在原地址值上加1;因为;因为char占占1个字节个字节3.1.3 引用类型引用又称为别名,它可以作为对象的另一个名字。通过引用我们可以间接操纵对象,使用方式类似于指针,但是不需要指针的语法。在程序中,引用主

9、要用作函数的形参。引用由类型标识符和一个取地址符(&)来定义,引用必须被初始化。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)引用一旦定义,就不能再指向其他的对象,对引用的所有操作都会被应用在它所指向的对象上。例如:int x=100,y=20;int&r=x;/r是x的引用 r=y;/r不是y的引用,而是x=y2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型引用的注意事项(2)注意引用的初始化和赋值极为不同:初始化时引用“指向”一个对象,赋值时,引用被作为所指对象的别名。虽然C+标准没有规定引用的实现方式,但是在很多C+编译器中,引用被实现为与所指对象占据同一地址空间,例如下面的代码:#include using namespa

11、ce 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+编译环境编译环境的输出结果如下:的输出结果如下:a=10&a=0 x22ff34ra=10&ra=0 x22ff34a=20&a=0 x22ff34ra=20&ra=0 x22ff342常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型引用与指针的差别(1)定义与初始化指针的

12、定义形式:类型*指针变量;指针的初始化:int x=10,y=20;int*pi;/可以不初始化pi=&x;/p 指向int 类型的对象xpi=&y;/p 也可以重新指向y引用的定义形式:类型&引用名=初始值;引用的初始化:定义引用时必须用有内存地址的对象初始化。引用在初始化之后,一直指向该对象。例如:int a=10,b=20;int&ri=a;/必须初始化ri=b;/等同于a=b;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型引用与指针的差别(2)使用方式指针通过解引用(*)运算间接访问指向的对象;引用作为对象的别名,

13、可以直接访问对象。例如:pi=&x;*pi=30;/x=30int&ri=a;ri=40;/a=402常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型引用与指针的差别(3)指针可以不指向任何对象,引用必须指向一个对象。pi=0;/pi是空指针,不指向任何对象ri=0;/a=02常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型引用与指针的差别(4)指针之间的相互赋值会改变指向关系;引用之间的相互赋值是它们指向的对象之间的赋值,引用关系本身并不改变。int x=1

14、00,y=20;int*p1=&x,*p2=&y;p1=p2;/p1=&y,p1 和p2 都指向yint&r1=x,&r2=y;r1=r2;/x y,r1 仍是x 的引用2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型3.1.4 数组数组是一个单一数据类型对象的集合。其中的单个对象没有命名,但可以通过它在数组中的位置进行访问,即下标访问。例如:/ia是包含10个int对象的数组 int ia10;/数组中下标为3的元素被赋值为7 ia3=7;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型

15、 数组 结构体 联合 枚举 类类型定义数组定义数组时需要指定类型名、数组名标识符和数组大小。数组大小是一个不小于1的常量表达式。数组元素的下标从0开始,到数组大小1。但是,C+并不提供对数组下标范围的检查,需 要 程 序 员 自 己 保 证 正 确 性。定义数组的同时可以对数组进行初始化,初始值放在花括号中,用逗号隔开。int ia3=1,2,3;int ib=4,5,6,7;int ic10=0,1,2;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型数组的注意事项一个数组不能被另一个数组初始化,也不能被直接赋值给另一数组

16、。C+也不允许声明一个引用数组,例如:int ia3=1,2,3;int ib=ia;/!Error int&ria=ia;/!Error int ival1=0,ival2=1;int&r2=a,b;/!Error int&rv1=ival1,&rv2=ival2;int rv2=rv1,rv2;/OK2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型C风格字符串C+保留了C语言中用字符数组表示字符串的方式,称为C风格字符串。可以通过库函数对这样的字符串进行操作。需要包含标准库头文件2常量和变量3运算符和表达式4语句5小结数

17、据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型多维数组定义多维数组,每一维的大小由一对方括号指定。例如:int ia43;访问多维数组的元素要指定每一维的下标。例如:ia12=5;多维数组也可以被初始化:int ia32=0,1,2,3,4,5 ;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型数组与指针数组名字代表数组第一个元素的地址,它的类型是数组元素类型的指针。例如对下面的数组定义:int ia5;ia是一个int*类型,ia和&ia0都表示第一个元素的地址。因而,除了使用下标访问数组元素

18、之外,还可以使用指针对数组进行访问。int main()int a10;int i;int*p;for(i=0;i 10;i+)ai=i;for(p=a;p a+10;p+)cout”运算符选择。定义结构体类型之后,可 以 创 建 该 类 型 的 许 多 实 例。例如:2常量和变量3运算符和表达式4语句5小结数据类型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;结构体变量内存中的

19、大小(1)结构体变量的成员在内存中依次存放,因而,原则上,结构体变量在内存中的大小是其所有成员的大小之和。但是,为了提高访问效率,大多数编译器实际上都使用了边界对齐技术。struct Y char c;int i;Y st;上面的变量st在内存中占据几个字节呢?是5吗?2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型结构体变量内存中的大小(2)内内存存地地址址1000开开始始的的一一个个机机器字器字内内存存地地址址1004开开始始的的一一个个机机器字器字内内存存地地址址1008开始开始 st.c占一个字节占一个字节st.i占

20、占一一个个完完整整的机器字的机器字为为了了边边界界对对齐齐而而空空出来的出来的3个字节个字节st占占的的8个字节个字节2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型在在GCC编译器下,编译器下,sizeof(Y)的结果是的结果是8。3.1.6 联合(共用体)union和struct的语法类似,只是数据成员的存储方式不同。union的每个成员都是从联合变量的首地址开始存储,所以每次只能使用一个成员。使用union可以节省空间,但是容易出错。union Packed char c;int i;float f;double d;

21、/联合的大小是其中double的大小 /因为double是占据空间最大的元素 Packed x;x.c=a;/其余成员现在不可使用 x.d=3.14;/覆盖了成员c的内容2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型联合的内存布局2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型x.dx的首地址的首地址x.cx.fx.i3.1.7 枚举枚举定义了一组命名的整数常量,从而提高代码的可读性。例如:enum ShapeType circle,square,rec

22、tangle;ShapeType枚举类型定义了3个常量:0,1,2 分别和名字circle,square以及rectangle关联。ShapeType是一个枚举类型,可以用它来定义枚举变量,变量的值只能是枚举成员。也可以自己指定枚举成员的值:enum ShapeTypecircle10,square20,rectangle;未指定值的枚举成员,编译器会赋给它相邻的下一个整数值,所以rectangle成员的值是21。枚举类型在必要时,如参与算术运算,会被自动提升为算术类型。枚举的成员名字是不可打印的,输出的是它所表示的整数值。另外,不能使用枚举成员进行迭代,C+不支持枚举成员之间的前后移动。2常

23、量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型3.1.8 类类型除了内置类型和复合类型之外,C+还允许用户自己定义类类型,并且在标准库中预定义了一些常用的类型。这里先简单介绍几种常用的标准类型。输入输出流输入输出流iostream 字符串类字符串类 标准数组标准数组向量类向量类 2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型输入输出流IOSTREAM输入输出操作是由iostream类提供的,使用iostream需包含标准库头文件:#include iost

24、ream库中有两个预定义的对象:cin,istream类型的对象,用于从用户类型的对象,用于从用户终端读入数据。终端读入数据。cin的常用方式为:的常用方式为:cin 变量名变量名;cin 变量名变量名1 变量名变量名2;cin 变量名变量名1 变量名变量名2 变量名变量名n;cout,ostream类型的对象,用于向用类型的对象,用于向用户终端写数据。户终端写数据。cout 的常用方式为:的常用方式为:cout 表达式表达式;cout 表达式表达式 endl;cout 表达式表达式1 表达式表达式2 表达式表达式n;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型

25、引用类型 数组 结构体 联合 枚举 类类型输入输出流IOSTREAM#include using namespace std;int main()int ival;float fval;cin ival;cin fval;cout ival n;cout fval ival fval;cout ival n fval endl;2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型字符串类STRING除了保留C风格字符串char*之外,C+标准库还定义了字符串类string。string类支持字符串对象的各种初始化方式,支持字符串

26、之间的拷贝、比较和连接等操作,还支持对字符串长度的查询和是否为空的判断,并且也可以访问字符串中的单个字符。使用string类,需要包含相应的头文件:s t r i n g。#include 2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型字符串类STRING#include#include using namespace std;int main()string s1,s2;/创建两个空字符串对象 string s3=Hello,World!;/初始化s3 string s4(I am);s2=“Today”;/赋值 s1=

27、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小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型字符串类STRING字符串比较使用运算符“=”获得字符串长度使用size()判断字符串是否为空使用empty()可以将一个C风格的字符串赋给string对象,但反之不可。要将string对象转换为

28、C风格字符串,使用c_str()操作,其返回结果为const char*,即转换得到的C风格字符串首地址。例如:string s1=“This is a book.”;int x=strlen(s1);/Errorx=strlen(s1.c_str();/OK2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型标准数组向量类C+标准库中的vector类为内置数组类提供了一种替代表示。为了使用vector,我们必须包含相关的头文件:vector。vector可以像数组一样使用,还可以以STL方式使用。/数组习惯#include u

29、sing namespace std;int main()vector iv(10);int ia10;for(int id=0;id10;id+)iaid=ivid;/2常量和变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型向量类: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常量和

30、变量3运算符和表达式4语句5小结数据类型1 内置数据类型 指针类型 引用类型 数组 结构体 联合 枚举 类类型3.2.1 内置数据类型的文字常量 当一个数值,例如5,出现在程序中时,它被称为文字常量(literal constant)。“文字”是因为只能以它的值的形式指代它。“常量”是因为它的值不能被改变。文字常量是不可寻址的。每个文字常量都有相应的类型,其类型由其形式、取值和后缀决定。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词整数文字常量 整数文字常量可以表示为十进制、八进制或十六进制的形式。例如23可以写成:23 /

31、十进制 027 /八进制 0 x17 /十六进制十进制整数文字常量默认类型是int,如果数值超出int能够表示的范围,那么其类型是long。八进制和十六进制整数文字常量的类型是int、unsigned int、long、unsigned long中第一个范围足够表示该数值的类型。可以在文字常量后面加“L”或“l”后缀将其指定为long类型。可以加“U”或“u”将其指定为无符号数。如:116u 120UL 2L3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词浮点型文字常量浮点型文字常量可以写成普通的十进制形式或科学计数法形式。例

32、如浮点数235.8可以表示为:235.8 2.358E2 浮点型文字常量默认为double类型,也可以加后缀改变其类型。float类型的浮点文字常量可以在后面加“F”或“f”标示,后缀“L”或“l”则为long double类型。3.14F 1.24f 2.5E3L3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词布尔型文字常量bool型的文字常量只有true和false。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词字符型文字常量字符型文字常量是用单引号括起

33、来的单个字符或以斜线开头的转义字符,如a,n。一些常用的转义字符如:转义转义字符字符含含义义转义转义字符字符含含义义n换换行符行符r回回车键车键b退格退格键键a响响铃铃符符t水平制表水平制表键键v垂直制表垂直制表键键反斜杠反斜杠键键?问问号号键键单单引号引号键键双引号双引号键键ooo八八进进制数制数ooo hhh十六十六进进制数制数hhh3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词字符串文字常量在程序中经常出现的还有用双引号括起来的字符序列,即字符串文字常量,例如hello world,其默认类型是const char*。

34、3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词3.2.2 变量和标识符变量变量为我们提供了一个有名字的存储区,可以通过代码对其进行读、写处理。变量有时也被称为对象。每个变量都有特定的数据类型,这个类型决定了相关内存的大小、布局、能够存储在该存储区的值的范围以及可以应用在其上的操作。例如:int count;double salary;3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词3.2.2 变量和标识符标识符引用变量要通过其名字,而变量由标识符命名。标识符

35、可以由字母、数字以及下划线组成,但必须由字母或下划线开头,并且区分大小写字母。上面代码中count和salary都是标识符。C+保留了一些词用作关键字,关键字不能作为程序的标识符使用。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词C+关键字asmasmautoautoboolboolbreakbreakcasecasecatchcatchcharcharclassclassconstconstconst_castconst_castcontinuecontinuedefaultdefaultdeletedeletedodod

36、oubledoubledynamic_castdynamic_castelseelseenumenumexplicitexplicitexportexportexternexternfalsefalsefloatfloatforforfriendfriendgotogotoif ifinlineinlineintintlonglongmutablemutablenamespacenamespacenewnewoperatoroperatorprivateprivateprotectedprotectedpublicpublicregisterregisterreinterpret_castre

37、interpret_castreturnreturnshortshortsignedsignedsizeofsizeofstaticstaticstatic_caststatic_caststructstructswitchswitchtemplatetemplatethisthisthrowthrowtruetruetrytrytypedeftypedeftypeidtypeidtypenametypenameunionunionunsignedunsignedusingusingvirtualvirtualvoidvoidvolatilevolatilewchar_twchar_twhil

38、ewhile变量的命名规则(1)变量名字要完全、准确地描述出该变量所代表的事物。变量名不能过短太短的名字无法传达足够的信息,也不能过长太长的名字很难写且不实用。研究表明,变量名的最佳长度是9到15个字符。使用i、j、k这些名字作为循环变量是约定俗成的,但不要在其他场合使用。给布尔变量赋予隐含“真/假”含义的名字,如done,error,found,success或ok等。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词变量的命名规则(2)常量、typedef和预处理宏全部大写;类和其他类型的名字混合大小写;变量名和函数名中第一

39、个单词小写,后续每个单词首字母大写,如variableOrRoutineName。除了在特定前缀中,不要用下划线作为名字中的分隔符,如student_name,用studentName更好。应该避免使用这些名字:令人误解的名字或缩写,具有相似含义的名字,带有数字的名字,拼写错误的单词,仅靠大小写区分的名字,混用多种自然语言(如汉语拼音和英语),标准类型和函数的名字。避免在名字中包含易混淆的字符:例如,数字一(1)、小写字母L(l)和大写字母i(I),数字0和大小写的字母O(o),数字2和字母z。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 vol

40、atile限定词变量的右值和左值变量和文字常量的区别在于变量是可寻址的,对于每个变量,都有两个值与之关联:它的数据值,存储在某个内存地址中。有时也它的数据值,存储在某个内存地址中。有时也被称为右值。文字常量和变量都可以被用作右被称为右值。文字常量和变量都可以被用作右值。值。它的地址值,即存储数据值的那块内存的地址。它的地址值,即存储数据值的那块内存的地址。有时被称为变量的左值。有时被称为变量的左值。在下面的赋值表达式中:count=count+5变量count同时出现在赋值操作的左边和右边。右边的变量被读取,读出其关联的内存中的数据值。而左边的count用作写入,原来的值会被加法操作的结果覆盖

41、。在这个表达式的赋值号右边,count和“5”用作右值,而左边的count用作左值。3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词变量的定义与声明定义变量变量的定义会引起相关内存的分配,因为一个变量只能在内存中占据一个位置,所以程序中的每个变量只能定义一次。变量定义的一般格式为:类型 名字;也可以一次定义多个同类型变量,如下:类型 名字1,名字2;例如:int ival;ival=5;/定义ival后就可以使用ivalint a,b,c;/定义三个int变量a,b,c3运算符和表达式4语句5小结1数据类型常量和变量2 文字常

42、量 变量和标识符 const限定词 volatile限定词变量的定义与声明声明变量如果在一个文件中定义了一个变量,其他的文件还想使用这个变量,就必须声明该变量。变量声明(declaration)的作用是使程序知道该变量的类型和名字。声明不会引起内存分配,程序中可以包含对同一变量的多个声明。声明全局变量格式:extern 类型 变量名;3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词变量的定义与声明声明变量/module0.cppint k=2;/定义变量定义变量k/module1.cpp#include/声明变量声明变量k/说

43、明了在说明了在module1.cpp之外的某处有之外的某处有k的定义的定义extern int k;int main()int t=3;/定义变量定义变量t,同时也是声明,同时也是声明 k=t+2;/使用变量使用变量k3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词变量的初始化定义变量的同时可以为变量提供初始值,否则对于全局变量,系统会自动提供初始值0,而局部变量是未初始化的。因为引用未初始化变量是程序中常见的错误,且不易被发现,因此建议为每个定义的变量提供一个初始值。C+支持两种形式的初始化:使用赋值操作符的使用赋值操作符的

44、显式显式语法形式(也叫赋值初语法形式(也叫赋值初始化):始化):int value=1024;char ch=t;将初始值放在括号中的将初始值放在括号中的隐式隐式形式(也叫直接初形式(也叫直接初始化):始化):int value(1024);char ch(t);3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const限定词 volatile限定词3.2.3 CONST限定词 3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 volatile限定词由const限定的对象不可改变。const在C+中用法非常多,主要有:限

45、定一个对象(变量)限定指针限定引用类的成员函数参数&返回值 限定一个对象3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象 限定指针 限定引用 volatile限定词程序中经常会使用某些常数值,如数组的大小。可是程序代码中如果充斥着这些数值,会降低程序的可读性和可维护性。C语言中我们使用预处理指令#define定义符号常量,但是这种常量的缺点在于它只是作简单的字符串替换,没有类型检查。C+中引入了const限定符,它将一个对象限定为常量。如:const int bufSize=1024;企图修改这个值会导致编译错误。因为常量在定义后不能修改

46、,所以必须进行初始化。限定指针首先回顾一下指针:#include using namespace std;int main()int ival=1024;int*pi=&ival;cout sizeof(pi):sizeof(pi)endl;cout sizeof(ival):sizeof(ival)endl;cout&pi:&pi endl;cout pi:pi endl;cout&ival:&ival endl;cout *pi:*pi endl;cout ival:ival endl;3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象

47、 限定指针 限定引用 volatile限定词DEV-C+结果如下:结果如下:sizeof(pi):4sizeof(ival):4&pi:0 x22ff70pi:0 x22ff74&ival:0 x22ff74*pi:1024ival:1024限定指针从程序结果可以看出:指针在内存中占4个字节,首地址是0 x22ff70,其中存放的是它所指向内容的首地址,int型变量ival在内存中占4个字节,首地址是0 x2274,这块内存存放的是ival的值1024。22ff70H22ff74H22ff741024指针pi所在的内存,放的是ival的首地址变量ival所在的内存,放的是ival的值3运算符和

48、表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象 限定指针 限定引用 volatile限定词问题:在这个例子中,如果我们不允许修改ival的值(即1024),怎么办呢?显然可以将ival定义成常量:const int ival=1024;那么能否通过间接方式修改一个常量呢?例如:const int ival=1024;int*pi=&ival;*pi=500;/可以修改吗?指向常量的指针(1)3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象 限定指针 限定引用 volatile限定词这段代码会

49、导致编译错误,理由并不是试图通过指针间接修改const,而是“试图将一个const地址赋值给一个非const指针”。要保存ival的地址,只能将pi定义成一个指向const int 的指针,成为指向常量的指针:const int ival=1024;const int*pi=&ival;/OK /或:int const*pi=&ival;/OK *pi=500;/Error指向常量的指针(2)3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象 限定指针 限定引用 volatile限定词在上面的代码中,pi是一个指向常量的指针,它所指向的内存

50、中的内容不可以改变。指向常量的指针(3)22ff70H22ff74H22ff741024const int*piconst int ivalpi指向的内存中的 内 容(即1024)不能变3运算符和表达式4语句5小结1数据类型常量和变量2 文字常量 变量和标识符 const 限定词 限定对象 限定指针 限定引用 volatile限定词指向常量的指针(4)注意:pi是一个指向常量的指针,但pi本身的值可以改变,指向另一个const int。例如:#include using namespace std;int main(int argc,char*argv)const int ival=1024;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服