C++基础教程1.pdf

上传人:无*** 文档编号:90929122 上传时间:2023-05-18 格式:PDF 页数:90 大小:12.73MB
返回 下载 相关 举报
C++基础教程1.pdf_第1页
第1页 / 共90页
C++基础教程1.pdf_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《C++基础教程1.pdf》由会员分享,可在线阅读,更多相关《C++基础教程1.pdf(90页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C+基础教程C+基础知识(B a s i c s o f C+)1.1 C+程 序 结 构(Structure of a program)下面我们从一个最简单的程序入手看一个C+程序的组成结构。/my first program in C+Hello World!#include using namespace std;int main()cout ”Hello World!”;return 0;左边程序的源代码文件名称为hellow orld.cppo右边显示了程序被编译执行后的输出结果。以上程序的运行结果是在屏幕上打出“Hello W orld!这句话。虽然它是C+可写出的最简单的程序之但

2、其中已经包含了每一个C+程序的基本组成结构。下面我们就逐个分析其组成结构的每一部分:/my first program in C+这是注释行。所有以两个斜线符号(/)开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序作简单解释或描述的,对程序本身的运行不会产生影响。在本例中,这行注释对本程序是什么做了一个简要的描述。#include 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子#includeiostream.h 告诉编译器的预处理器将输入输出流的标准头文件(iostream.h)包括在本程序中。这个头文件包括了

3、C+中定义的基本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用到它的功能。using namespace std;C+标准函数库的所有元素都被声明在一个名空间中,这就是s td 名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。这条语句在使用标准函数库的C+程序中频繁出现,本教程中大部分代码例子中也将用到它。int main()这一行为主函数(main function)的起始声明。main function是所有C+程序的运行的起始点。不管它是在代码的开头,结尾还是中间-此函数中的代码总是在程序开始运行时第一个被执行。并且,由

4、于同样的原因,所有C+程序都必须有一个main function。m ain后面跟了一对圆括号(),表示它是一个函数。C+中所有函数都跟有一对圆括号(),括号中可以有一些输入参数。如例题中显示,主函数(main function)的内容紧跟在它的声明之后,山花 括 号()括起来。cout Hellow World!”;这个语句在本程序中最重要。cout是 C+中的标准输出流(通常为控制台,即屏幕),这句话把一串字符串(本例中为“Hello World”)插入输出流(控制台输出)中。cout在的声明在头文件iostream.h中,所以要想使用cout必须将该头文件包括在程序开始处。注意这个句子以

5、分号(;)结 尾。分号标示了一个语句的结束,C+的每一个语句都必须以分号结尾。(C+程序员最常犯的错误之一就是忘记在语句末尾写上分号)。return 0;返回语句(return)引起主函数main()执行结束,并将该语句后面所跟代码(在本例中为0)返回。这是在程序执行没有出现任何错误的情况下最常见的程序结束方式。在后面的例子中你会看到所有C+程序都以类似的语句结束。你可能注意到并不是程序中的所有的行都会被执行。程序中可以有注释行(以开头),有编译器预处理器的指示行(以#开头),然后有函数的声明(本例中main函数),最后是程序语句(例如调用co u t ),最后这些语句行全部被括在主函数的花括

6、号(什)内。本例中程序被写在不同的行中以方便阅读。其实这并不是必须的。例如,以下程序int main()(cout ”Hello World”;return 0;)也可以被写成:int main()cout Hello World return 0;以上两段程序是完全相同的。在 C+中,语句的分隔是以分号(;)为分隔符的。分行写代码只是为了更方便人阅读。以下程序包含更多的语句:/my second program in C+Hello World!Pm a C+program#include int main()(cout Hello World!cout Im a C+program1;re

7、turn 0;在这个例子中,我们在两个不同的语句中调用了 cout 函数两次。再一次说明分行写程序代码只是为了我们阅读方便,因为这个main函数也可以被写为以下形式而没有任何问题:int main()cout Hello World!cout *Im to C+program return 0;为方便起见,我们也可以把代码分为更多的行来写:int main()(coutnHello World!1;cout Fm a C+program;return 0;)它的运行结果将和上面的例子完全一样。这个规则对预处理器指示行(以#号开始的行)并不适用,因为它们并不是真正的语句。它们由预处理器读取并忽略

8、,并不会生成任何代码。因此他们每一个必须单独成行,末尾不需要分号(;)注 释(Comments)注释(comments)是源代码的一部分,但它们会被编译器忽略。它们不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。C+支持两中插入注释的方法:/line comment/*block comment*/第一种方法为行注释,它告诉编译器忽略从开始至本行结束的任何内容。第二种为块注释(段注释),告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。在以下我们的第二个程序中,我们插入了更多的注释。/*my second program in C+He

9、llo World!Im a C+programwith more comments*/#include int main()cout Hello World!”;says Hello World!cout Im a C+program”;says Im a C+programreturn 0;)如果你在源程序中插入了注释而没有用符号或/*和*/符号,编译器会把它们当成C+的语句,那么在编译时就会出现一个或多个错误信息。1.2 变量,数据类型,常 量(Variables.Data types.Constants)为了能够进一步写出可以执行更有用的任务的程序,我们需要引入变量(v a r i a

10、 b l e)这个的概念。让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字。你已经存储了两个数值在你的记忆里。现在我要求你在我说的第一个数值上加1,你应该保留6 (即5+1)和2在你的记忆里。现在如果我们将两数相减可以得到结果4。所有这些你在脑子里做的事情与计算机用两个变量可以做的事情非常相似。同样的处理过程用C+来表示可以写成下面一段代码:a=5;b=2;a=a+1;result=a-b;我们可以将变量(v a r i a b l e)定义为内存的一部分,用以存储一个确定的值。每 一 个 变 量(v a r i a b l e)需要一个标识,以便将它与其他变量相区

11、别,例如,在前面的代码中,变量标识是a,b,和r e s u l t。我们可以给变量起任何名字,只要它们是有效的标识符。标 识(Identifiers)有效标识由字母(l e t t e r),数字(d i g i t s)和下划线(一)组成。标识的长度没有限制,但是有些编译器只取前32个字符(剩下的字符会被忽略)。空格(s p a c e s),标点(p u nc t u a t i on m a r k s)和符号(s y m b ol s)都不可以出现在标识中。只有字母(l e t t e r s),数字(d i g i t s)和下划线(。是合法的。并且变量标识必须以字母开头。标识也可

12、能以下划线(_)开头,但这种标识通常是保留给为外部连接用的。标识不可以以数字开头。必须注意的另一条规则是当你给变量起名字时不可以和C+语言的关键字或你所使用的编译器的特殊关键字同名,因为这样与这些关键字产生混淆。例如,以下列出标准保留关键字,他们不允许被用作变量标识名称:asm,auto,bool,break,case,catch,char,class,const,const_cast,continue,default,de I etef do,doub I et dynamic_cast,else,enum,expl ic it,extern,false,flo at,for,friend,

13、goto,if,inline,int,long,mutable,namespace,new,operator,private,protected,pub I ict register,re i nterpret_cast,return,short,signed,s i zeof t stat i c,stat i c_cast,struct,switch,temp I ate,this,throw,true,try,typedef,type id,typename,unionf unsigned,using,virtu al,void,vo latile,wchar_t,while另外,不要使

14、用一些操作符的替代表示作为变量标识,因为在某些环境中它们可能被用作保留词:and,and_eqt bitand,b ifo rt comp I,not,not_eq,or,or_eq,xor,xor_eq你的编译器还可能包含一些特殊保留词,例如许多生成16位码的编译器(比如一些D O S编 译 器)把f a r,h u g e和ne a r也作为关键字。非常重要:C+语 言 是“大小写敏感”(“c a s e s e ns i t i v e )的,即同样的名字字母大小写不同代表不同的变量标识。因此,例如变量R E S UL T,变量r e s u l t和变量R e s u l t分别表示三

15、个不同的变量标识.基本数据类型(Fundamental Data types)编程时我们将变量存储在计算机的内存中,但是计算机要知道我们要用这些变量存储什么样的值,因为一个简单的数值,一个字符,或一个巨大的数值在内存所占用的空间是不一样的。计算机的内存是以字节(b y t e)为单位组织的。一个 字 节(b y t e)是我们在C+中能够操作的最小的内存单位。一个字节(b y t e)可以存储相对较小数据:一个单个的字符或一个小整数(通常为一个0到255之间的整数)。但是计算机可以同时操作处理由多个字节组成复杂数据类型,比如长整数(l ong i nt e g e r s)和小 数(d e c

16、 i m a l s)。以下列表总结了现有的C+基本数据类型,以及每一类型所能存储的数据范围:数据类型(D A T A T Y P E S)名称字节数描述范围char1字 符(character)或整数(integer),8位(b its)长有 符 号(signed):-128 到 127无 符 号(unsigned):0 到 255short int(short)2短 整 数(integer)16 位(b its)长有 符 号(signed):-32768 到32767无符号(unsigned):0 至 IJ 65535long int(long)4长 整 数(integer)32 位(b

17、its)长有符号(signed):-2147483648 到2147483647无 符 号(unsigned):0到4294967295int4整 数(integer)有符号(signed):-2147483648 到2147483647无 符 号(unsigned):0到4294967295float4浮 点 数(floating point number)3.4e+/-38(7 个数字(7digits)double8双精度浮点数(double precision floatingpoint number)1.7e+/-308(15 digits)longdouble8长双精度浮点数(lon

18、g double precisionfloating point number)1.7e+/-308(15 digits)bool1布尔Boolean值。它只能是真(true)或假(false)两值之一。true 或 falsewchar_t2宽字符(Wide character)。这是为存储两字节(2 bytes)长的国际字符而设计的类型。个宽字符(1 wide characters)*字节数列和范围一列可能根据程序编译和运行的系统不同而有所不同。这里列出的数值是多数32位系统的常用数据。对于其他系统,通常的说法是整型(i n t)具有根据系统结构建议的自然长度(即一个字。n e w or

19、d的长度),而 4 中整型数据ch a r,s h or t,i n t,l on g 的长度必须是递增的,也就是说按顺序每一类型必须大于等于其前面一个类型的长度。同样的规则也适用于浮点数类型f l oa t,dou b l e和 l on g dou b l e,也是按递增顺序。除以上列出的基本数据类型外,还有指针(poi n t er)和 v oi d参数表示类型,我们将在后面看到。变 量 的 声 明(Declaration of variables)在 C+中要使用一个变量必须先声明(decl a r e)该变量的数据类型。声明一个新变量的语法是写出数据类型标识符(例如i n t,s h

20、 or t,f l oa t.)后面跟一个有效的变量标识名称。例如:int a;float mynumber;以上两个均为有效的变量声明(variable declaration)。第一个声明一个标识为 a 的整型变量(int variable),第二个声明一个标识为mynumber的浮点型变量(float variable)o声明之后,我们就可以在后面的程序中使用变量a 和mynumber 了。如果你需要声明多个同一类型的变量,你可以将它们缩写在同一行声明中,在标识之间用逗号(comma)分隔。例如:int a,b,c;以上语句同时定义了 a、b、c 3 个整型变量,它与下面的写法完全等同:

21、int a;int b;int c;整型数据类型(char,short,long和 int)可以是有符号的(signed)或无符号 的(unsigned),这取决于我们需要表示的数据范围。有符号类型(signed)可以表示正数和负数,而无符号类型(unsigned)只能表示正数和0。在定义一个整型数据变量时可以在数据类型前面加关键字signed或 unsigned来声明数据的符号类型。例如:unsigned short NumberOfSons;signed int MyAccountBalance;如果我们没有特别写出signed或 unsigned,变量默认为signed,因此以上第二个声

22、明我们也可以写成:int MyAccountBalance;因为以上两种表示方式意义完全一样,因此我们在源程序通常省略关键字signed。唯一的例外是字符型(char)变量,这种变量独立存在,与 signed char和unsigned char型均不相同。short和 long可以被单独用来表示整型基本数据类型,short相当于shortint,long 相当于 long into 也就是说 short year;和 short int year;两种声明是等价的。最后,signed和 unsigned也可以被单独用来表示简单类型,意思分别同signed int和 unsigned int相

23、同,即以下两种声明互相等同:unsigned MyBirthYear;unsigned int MyBirthYear;下面我们就用C+代码来解决在这一节开头提到的记忆问题,来看一下变量定义是如何在程序中起作用的。/operating with variables 4#include using namespace std;int main()(/declaring variables:int a,b;int result;/process:a=5;b=2;a=a+1;result=a-b;/print out the result:cout result;/terminate the pro

24、gram:return 0;如果以上程序中变量声明部分有你不熟悉的地方,不用担心,我们在后面的章节中很快会学到这些内容。变量初始化(Initialization of variables)当一个本地变量(local variable)被声明时,它的值默认为未定(undetermined)。但你可能希望在声明变量的同时赋给它一个具体的值。要想达到这个目的,需要对变量进行初始化。C+中有两种初始化方法:第一种,又叫做类C (c-like)方法,是在声明变量的时候加上一个等于号,并在后面跟上想要的数值:type identifier=initial_value;例如,如果我们想声明一个叫做a的 i

25、n t变量并同时赋予它0 这个值,我们可以这样写:int a=0;另外一种变量初始化的方法,又叫做构造函数(c o n str uc to r)初始化,是将初始值用小括号(p a r e n th e si s()括起来:type identifier(initial_value);例如:int a(0);在 C+.中以上两种方法都正确并且两者等同。变量的范围(Scope of variables)所有我们要使用的变量都必须事先声明过。c和C+语言的一个重要区别是,在C+语言中我们可以在源程序中任何地方声明变量,甚至可以在两个可执行(e x c uta b l e)语句的中间声明变量,而不象在

26、C 语言中变量声明只能在程序的开头部分。然而,我们还是建议在一定程度上遵循C 语言的习惯来声明变量,因为将变量声明放在一处对d e b ug 程序有好处。因此,传统的C 语言方式的变量声明就是把变量声明放在每一个函数(f un c ti o n)的开头(对本地变量l o c a l v a r i a b l e)或直接放在程序开头所有函数(f un c ti o n)的外面(对全局变量g l o b a l v a r i a b l e)oLocal variab les#in clu d e int Integer;chax aC haxacter;char str in g 20;un

27、signed int NumberOfSons;m ain()(unsigned sh ort Age;f lo a t ,AnotherQie;cout Enter youx age:)InstrocUonrGtobalTariaiblBr全局变量G l o b a lv a r i a b l e s可以在程序中任何地方任何函数(f un c ti o n)中被引用,只要是在变量的声明之后。本地变量l o c a lv a r i a b l e s的作用范围被局限在声明它的程序范围内。如果它们是在一个函数的开头被声明的(例如m a i n 函数),它们的作用范围就是整个m a i n 函

28、数。在左图的例子中,这就意味着如果在 m a i n 函数外还另有一 个函数,m a i n 函数中声明的本地变量(Ag e,ANum b e r,An o th e r On e)不能够被另一个函数使用,反之亦然。在 C+中,本地变量(l o c a l v a r i a b l e)的作用范围被定义在声明它的程序块内(一个程序块是被一对花括号(c ur l y b r a c k e ts )括起来的一组语句)。如果变量是在一个函数(f un c ti o n)中被声明的,那么它是一个函数范围内的变量,如果变量是在一个循环中(l o o p)中被声明的,那么它的作用范围只是在这个循环(l

29、 o o p)之中,以此类推。除本地和全局范围外,还有一种外部范围,它使得一个变量不仅在同i源程序文件中可见,而且在其他所有将被链接在一起的源文件中均可见。常量:字(Constants:Literals)一个常量(c o n sta n t)是一个有固定值的表达式。常量(c o n sta n t)可以被分为整数(In te g e r Num b e r s),浮点数(F l o a ti n g-Po i n t Num b e r s),字符(Ch a r a c te r s)和字符串(S tr i n g s)。整数(Integer Numbers)1776707-273他们是整型常

30、数,表示十进制整数值。注意表示整型常数时我们不需要些引号(quotes()或任何特殊字符。毫无疑问它是个常量:任何时候当我们在程序中 写1776,我们指的就是1776这个数值。除十进制整数另外,C+还允许使用八进制(octal numbers)和十六进制(hexadecimal numbers)的 字 常 量(literal constants)。如果我们想要表示一 八进制数,我们必须在它前面加上一个0字符(zero character),而表示十六进制数我们需要在它前面加字符Ox(zero,x)0例如以下字常量(literalconstants)互相等值:75/十进制 decimal0113

31、/八进制 octa I0 x4b/十六进制 hexadec i m a I所有这些都表示同一个整数:75(seventy five),分别以十进制数,八进制数和十六进制数表示。备注:你可以在文章Numerical radixes中看到更多关于十六进制和八进制表示方式的信息。浮点数(Floating Point Numbers)浮点数以小数(decimals)和/或 指 数 嘉(exponents)的形式表示。它们可以包括一个小数点,一 个e字 符(表 示by ten at the Xth height”,这 里X是后面跟的整数值),或两者都包括。3.14159/3.141596.02e23/6

32、.02 x 10231.6e-19/1.6 x 10-193.0/3.0以上是包含小数的以C+表示的4个有效数值。第一个是PI,第二个是Avogadro数之一,第三个是一个 电 子(electron)的 电 量(electric charge)(一个极小的 数 值)-所有这些都是近似值。最后一个是浮点数字常量表示数3。字符和字符串(Characters and strings)此外还有非数字常量,例如:z,p“H e I Io w o r Id“H o w do y o u do?”前两个表达式表示单独的字符(ch a r a ct er),后面两个表示由若干字符组成的字符串(s t r i

33、n g)。注意在表示单独字符的时候,我们用单引号(s i n g le q u o t es(),在表示字符串或多于一个字符的时候我们用双引号(do u ble q u o t es ()兀当以常量方式表示单个字符和字符串时,必须写上引号以便把他们和可能的变量标识或保留字区分开,注意以下例子:XXX 指一个变量名称为X,而 X 指字符常量 X。字符常量和字符串常量各有特点,例如es ca p e co des,这些是除此之外无法在源程序中表示的特殊的字符,例如换行符n ew li n e(n)或跳跃符t a b(t)。所有这些符号前面要加一个反斜杠i n v er t ed s la s h

34、()。这里列出了这些es ca p eco des:例如:n换行符newliner回车 carriage returnt跳跃符 tabulationv垂直跳跃 vertical tabulationbbackspacefpage feeda警告 alert(beep)单弓 1 号 single quotes()双引号 double quotes()?问号 question(?)反斜杠 inverted slash()t“Lef t t Ri gh t”o n en t w o n t h r ee”另外你可以数字A S C H码表示一个字符,这种表示方式是在反斜杠()之后加以8进制数或十六进制

35、数表示的A S C H码。在 第 一 种(八进制o ct a l)表示中,数字必需紧跟反斜杠(例如23或40),第二种(十六进制h ex a cedi m a l),必须在数字之前写一个x字符(例如x20或x4A)。关于此类es ca p e co de的更多信息,请参阅文件A S CH Co de 0如果每一行代码以反斜杠i n v er t ed s la s h ()结束,字符串常量可以分多行代码表示:“s t r i n g ex p r es s ed i n t w o Ii n es”你还可以将多个被空格bla n ks p a ce、跳 跃 符t a bu la t o r 换

36、行符n ew li n e或其他有效空白符号分隔开的字符串常量连接在一起:we form a single string of characters,定义常量 Defined constants(#define)使用预处理器指令#defi n e,你可以将那些你经常使用的常量定义为你自己取的名字而不需要借助于变量。它的格式是:#def i n e i den t i f i er v a Iu e例如:#define PI 3.14159265#define NEWLINE n#define WIDTH 100以上定义了三个常量。一旦做了这些声明,你可以在后面的程序中使用这些常量,就像使用其它

37、任何常量一样,例如:circle=2*PI*r;cout NEWLINE;实际上编译器在遇到#defi n e指令的时候做的只是把任何出现这些常量名(在前面的例子中为P I,NE W L I N E或W I D TH)的地方替换成他们被定义为的代码(分别为3.14 15 926 5,n 和100)。因此,由#d e f i n e定义的常量被称为宏常量m a c r oc o n s t a n t Sod e f i n e指令不是代码语句,它是预处理器指令,因此指令行末尾不需要加分号s e m i c o l o n (;)。如果你在宏定义行末尾加了分号(;),当预处理器在程序中做常量替换

38、的时候,分号也会被加到被替换的行中,这样可能导致错误。声明常量 declared constants(const)通过使用c o n s t前缀,你可以定义指定类型的常量,就像定义一个变量一样:const int width=100;const char tab=V;const zip=12440;如果没有指定类型(如上面最后例子中最后一行),编译器会假设常量为整型into1.3操作符/运算符(Operators)前面已经学习了变量和常量,我们可以开始操作他们。C+提供一系列的运算符,它们是一组关键字或非字母但是在所有键盘上都有的符号。运算符是C+语言的基础,所以非常重要。你不需要背下所有这一

39、小节的内容,这些细节知识仅供你以后需要时参考。赋值 Assignation(=)赋值运算符的功能是将一个值赋给一个变量。a=5;将整数5赋给变量a。=运算符左边的部分叫做l v a l u e (l e f t v a l u e),右边的部分叫做r v a l u e (r i g h t v a l u e)o l v a l u e必须是一个变量,而右边的部分可以是一个常量,一个变量,一个运算(o p e r a t i o n)的结果或是前面儿项的任意组合。有必要强调赋值运算符永远是将右边的值赋给左边,永远不会反过来。a=b;将变量b (r v a l u e)的值赋给变量a (l v

40、 a l u e),不 论a当时存储的是什么值。同时考虑到我们只是将b的数值赋给a,以后如果b的值改变了并不会影响到a的值.例如:如果我们使用以下代码(变量值的变化显示在绿色注释部分):int a,b;/a:?b:?a=10;/a:10b:?b=4;/a:10b:4a=b;/a:4 b:4b=7;/a:4 b:7以上代码结果是a的值为4,b 的值为7 o 最后一行中b的值被改变并不会影响到 a,虽然在此之前我们声明了 a =b;(从右到左规则r i g h t-t o-l e f t r u l e)C+拥有而其他语言没有的一个特性是赋值符(=)可以被用作另一个赋值符的r v a l u e

41、(或r v a l u e 的一部分)。例如:a=2+(b=5);等同于:b=5;a=2+b;它的意思是:先将5 赋给变量b,然后把前面对b的赋值运算的结果(即5)加上 2 再赋给变量a,这样最后a中的值为7。因此,下面的表达式在C+中也是正确的:a =b =c =5;将5 同时赋给3 个变量a,b 和 c。数学运算符 Ar i t h m e t i c o p e r a t o r s (+,*,/,%)C+语言支持的5 种数学运算符为:+加 addition-减 subtraction*乘 multiplication/除 division%取模 module加减乘除运算想必大家都很了

42、解,它们和一般的数学运算符没有区别。唯一你可能不太熟悉的是用百分号(船表示的取模运算(m o d ul e)0取模运算是取两个整数相除的余数。例如,如果我们写a =1 1%3;,变量a的值将会为结果 2,因为2 是 1 1 除以3 的余数。组合运算符 Compound assignation operators(+=,=,*=,/=,%=,=,=,&=,A=,|=)C+以书写简练著称的一大特色就是这些组合运算符c o m p o un d a s s i g n a t i o no p e r a t o r s (+=,-=,*=和/=及其他),这些运算符使得只用一个基本运算符就可改写变量

43、的值:va l ue +=i n c r e a s e;等同于 va l ue =va l ue +i n c r e a s e;a -=5;等同于 a =a-5;a /=b;等同于 a =a /b;p r i c e *=un i t s +1;等同于 p r i c e =p r i c e *(un i t s +1);其他运算符以此类推。递增和递减 Increase and decrease书写简练的另一个例子是递增(i n c r e a s e)运 算 符(+)和递减(d e c r e a s e)运算符(一)。它们使得变量中存储的值加1 或减l o 它们分别等同于+=1 和

44、-=1。因此:a+;a+=1;a=a+1;在功能上全部等同,即全部使得变量a的值加l o它的存在是因为最早的C 编译器将以上三种表达式的编译成不同的机器代码,不同的机器代码运行速度不一样。现在,编译器已经基本自动实行代码优化,所以以上三种不同的表达方式编译成的机器代码在实际运行上已基本相同。这个运算符的一个特点是它既可以被用作p r e f i x前缀,也可以被用作后缀s uf f i x,也就是说它既可以被写在变量标识的前面(+a),也可以被写在后面(a+)o虽然在简单表达式如a+或+a 中,这两种写法代表同样的意思,但当递增 i n c r e a s e 或递减d e c r e a s

45、 e 的运算结果被直接用在其它的运算式中时,它们就代表非常不同的意思了:当递增运算符被用作前缀p r e f i x(+a)时,变量a的值线增加,然后再计算整个表达式的值,因此增加后的值被用在了表达式的计算中;当它被用作后缀s uf f i x(a+)时,变量a的值在表达式计算后才增加,因此 a 在增加前所存储的值被用在了表达式的计算中。注意以下两个例子的不同:Example 1Example 2B=3;A=+B;/A i s 4,B i s 4B=3;A=B+;/A i s 3,B i s 4在第一个例子中,B 在它的值被赋给A 之前增加1。而在第二个例子中B 原来的值 3被赋给A 然后B

46、的值才加1变为40关系运算符 Relational operators(=,!=,=,=)我们用关系运算符来比较两个表达式。如ANSI-C+标准中指出的,关系预算的结果是一个bool值,根据运算结果的不同,它的值只能是真true或 false。例如我们想通过比较两个表达式来看它们是否相等或一个值是否比另一个的值大。以下为C+的关系运算符:(b=2)=a)将返回 true.注意:运算符=(单个等号)不同于运算符=(双等号)。第一个是赋值运算符(将等号右边的表达式值赋给左边的变量);第二个(=)是一个判断等于的关系运算符,用来判断运算符两边的表达式是否相等。因此在上面例子中最后一个表达式(b=2)

47、=a),我们首先将数值2赋给变量b,然后把它和变量a进行比较。因为变量a中存储的也是数值2,所以整个运算的结果为t r u e。在A N SI-C+标准出现之前的许多编译器中,就 像C语言中,关系运算并不返回值为真t r u e或假f a l s e的b o o l值,而是返回一个整型数值最为结果,它的数值可以为0,代表“f a l s e”或一个非0数值(通常为1)来代表 t r u e。逻辑运算符 Logic operators(!,&,|)运 算 符!等同于b o o l e a n运 算N O T (取 非),它只有一个操作数(o pe r a n d),写在它的右边。它做的唯一工作就

48、是取该操作数的反面值,也就是说如果操作数值为真t r u e,那么运算后值变为假f a l s e,如果操作数值为假f a l s e,则运算结果为真t r u e。它就好像是说取与操作数相反的值。例如:!(5=5)返回false,因为它右边的表达式(5=5)为真true.!(6=4)返回true因为(6 6)返回 false(true&false).(5=5)II(3 6)返回 true(true II false).条件运算符 Conditional operator(?)条件运算符计算一个表达式的值并根据表达式的计算结果为真t r u e 或假f a l s e而返回不同值。它的格式是:

49、condition?result 1 :result2(条件?返回值 1 :返回值 2)如果条件co n d it io n 为真t r u e,整个表达式将返回e s u l t l,否则将返U r e s u l t 2o7=5?4:3返回3,因为7 不等于5.7=5+2?4:3返回4,因为7 等于5+2.53?a:b返回a,因为5 大于3.ab?a:b返回较大值,a 或 b.位运算符 Bitwise Operators(&,|,A,)位运算符以比特位改写变量存储的数值,也就是改写变量值的二进制表示:opasmDescription&AND逻 辑 与 Logic AND1OR逻辑或Logi

50、c ORAXOR逻辑异或 Logical exclusive ORNOT对 1 取 补(位 反 转)Complement to one(bit inversion)SHL左移 Shift LeftSHR右移 Shift Right变量类型转换运算符 Explicit type casting operators变量类型转换运算符可以将-种类型的数据转换为另一种类型的数据。在写c+中有几种方法可以实现这种操作,最常用的一种,也是与c 兼容的一种,是在原转换的表达式前面加用括号()括起的新数据类型:int i;float f=3.14;i=(int)f;以上代码将浮点型数字3.1 4转换成一个整数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com