您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第五章CC++语言变量和常量
第五章变量和常量5.1从类型到变量5.1.1公孙龙的“白马非马”故事是春秋时的公孙龙先生说的。城门上告示:“马匹不得入城”。公孙龙同志骑白马而来,遭拒入。公孙龙一脸正色:“告示上写的是‘马’,而我骑的是‘白马’,难道‘马’等于‘白马’吗?”守门士兵觉得白马还真不是马,于是放行。依公孙龙先生的理论认为:如果白马是马,黑马也是马,那么岂不白马等于黑马,所以,不能说白马是马。“白马非马”是中国哲学史上的一桩公案。不过,若是我们从程序的角度上说,可以认为:马在这里表示一种类型,而白马,黑马它们的类型都是马。白马,黑马具有相同的“数据类型”,但它们都相对独立的个体。从这点说,别说有白黑之分,就算同样是白马,这一匹和哪一匹白马,也是相对独立的个体。在程序中,“类型”和“变量”的关系正是“马”和“白马”的关系。如果C或C++有这种数据类型:Horse,那么,定义一匹“白马”的变量应该这样:HorseAWhiteHorse;以后我们说不定真的有机会自已定义Horse,不过现在,我们在上一章的学的数据类型是:char,int,bool等等。假设我们需发使用一个有关年龄的变量,在C或C++中是这样定义的:intage;现在让我们来事先建立一个空的工程,随着本章课程的进展,我们需要不断地在工程中加入零星的代码,及时实践。仍然是一个空的控件台程序。方法是……以前我们讲过,忘了就看前面章节吧。代码文件Unit1.cpp中,手工加入以下的黑体部分://---------------------------------------------------------------------------#includeiostream.h#pragmahdrstop//---------------------------------------------------------------------------#pragmaargsusedintmain(intargc,char*argv[])]{getchar();return0;}//---------------------------------------------------------------------------5.1.2定义变量语法:数据类型变量名;“张三”既可以指张三这个人,也可以是张三的名字。同样,上面的“变量名”,其实也就是变量本身。举上一节的例子:intage;其中,int是数据类型(整型),而age是变量名,更多的时候,我们就说是变量age。最后是一人分号。它表示定义一变量在C或C++里一句完整的语句。因为C++的语言总是以分号结束。如果要声明一个字符类型变量:charletter;声明一个bool类型的变量:booldo_u_love_me;其它类型,除了void不能直接定义一个变量以外,格式都是一样的。voidavoid;//错!void类型无法直接定义一个变量。有时同一时候同一数据类型需要多个变量,此时可以分别定义,也可以一起定义:inta;intb;intc;下面采用一起定义,会更省事:inta,b,c;一起定义多个同类型变量的方法是:在不同变量之间以逗号(,)分隔,最后仍以分号(;)结束。让我们来试试变量定义,另外,我们还要趁此机会,看看一个变量在仅仅进行定义之后,它的值会是什么。继续上一小节的代码。仍然是加入黑体部分,当然//及其后面的内容是注释,你可以不输入。......intmain(intargc,char*argv[])]{/////////////////定义变量////////////////////////////////////////////////////以下定义三个变量:a,b,cinta;doubleb,c;//a,b,c仅仅被定义,它的值会是什么?我们用cout输出三个变量:couta=ab=bc=cendl;getchar();return0;}最好先保存代码文件和工程文件。然后按F9运行。以下是笔者机器得到结果。a是1,b和c都像天文数字?嗯,从这里我们学到一个C,C++编程极其重要知识:未初始化的变量,它的值将是未确定的。所谓“未初始化”,就是指这个变量只有定义代码,而没有赋值。(立即重复执行这段代码,得到结果可能都一样,但这并不说明这些值就是可以确定不变。)5.1.3如何为变量命名C/C++的变量的名字中只能有以下字符:大小写字母、阿拉伯数字(但不能做为开头)、下划线_。汉字不能成为变量名。不过,就算允许,又有谁会这么累呢,用汉字作变量名?不能或不要不能取名为C、C++的保留字。如:intchar;//不行这是不被允许的。char是一个保留字。我们不能再拿来做变量。不能超过250个字符。这在BCB里有规定。是一个可以调整的值。不能以数字开头int100;//不行int100ren;//不行不能夹有空格booldoyouloveme;//不行你可以用下划线代替空格:booldo_you_love_me;//OK不能在同一作用范围内有同名变量(仅C++)比如:intabc;intabcd;intabc;//不行在C里,上面重复定义变量abc是被允许的。关于作用范围,我们以后会讲到。不要和C、C++中已有的全局变量,函数,类型名取相同的名字。doublesin;这不合适。因为C库为我们提供了计算正弦值的函数,名字就叫sin;不要太长。是的,250个字符其实太长了。如果有个变量名长达30个字母,我看不仅你自已写得累,别人看着也会觉得是在读外国小说,主人公的名字太长,烦人。不要太短这个我们放到后面说。以上几点中,凡标为“不能”,意味如果你违反了,你的程序便会在编译时出错。而“不要”则仅属建议内容。真要这么做,程序也没错。另外,我们还建议要为每个变量取一个有意义的名字。比如NumberOfStudents,这个变量一看就明白是为“学生的人数”定义的。而如果定义为aaa,cc,之类,就容易混淆。当然,有一些约定成俗的用法,如字母i,j,等常用来作循环流程中的计数变量。再者,有意义的名字并不是指一定要把变量所要代表的意思用英文句子写出,一般可以用简写,如NumOfStudent,它同样意义明了,但更简短。而且,如果我们英文一般,那么有时也可以使用拼音。这里就不举例了,因为笔者连拼音都很次。前面说到取名不要太短,说的就是避免像aaa,cc之类的图输入方便,但毫无意义,不可读的变量命名习惯。(你很快就会在教程中发现,笔者似乎自已违反了这个规定,用一些a,b,c作为变量名。这不能说是笔者的错。因为会有些时候变量的意义并不重要)最后,C,C++是区要大小写的语言,所以变量Num和变量num完全是两个变量。大家在定义,使用变量要注意到这一点。关于变量的命名,我们不做实践。下面附加说说编程中命名的一些风格。附:关于命名变量的几种风格。较早以前,现在仍流行于UNIX、Linux编程界,程序员喜欢用全部小写的单词来命名变量,如果两个单词,比如mycar,常用的命名方法有两种:my_car或myCar。my_car自然看起清楚,不过输入频繁地下划线是件累事(根据指法,下划线必须使用小指头按)。后一种方法被称为“驼峰表示法”,原因是大写字母看起来想凸起的驼峰。之所以不使用MyCar,原因是C/C++允许程序自定义数据类型,所以有必要从一个名字上很快地区分它是变量或是数据类型。方法是让自定义的数据类型都用大写开头。比如前面的说的“马”是程序员自定的数据类型,那么如果采用这里的命名规则,则应取名为:Horse,而“一匹白马”是变量,所以取名为:aWhiteHorse。HorseaWhiteHorse;在C++Builder里,并没有限制大家如何为变量取名。所以为了仍可以很明显的做到上述的区分,CB的方法是对用户自定义的数据类型在前头加一个字母T(Type的首字母)。仍如Horse,则改名为:THorse。前面我们写Windows版的helloworld时,使用了一个Label控件,其实,检查代码你会发现,它的类名就叫:TLabel。最后还有一种方法是匈牙利标记法(Hungariannotation)。该法要求在每人变量的前面加上若干个用于表示该变量的数据类型的小写字母。如iMyCar表示这个变量是整型(i表示int);而倘若是cMyCar,则表示这个变量是char类型。该法经过一段时间的训练熟悉以后,会带来一些好处。问题是如果对自定义的数据类型也按这种方法进行,就不是经过训练就能熟悉了。比如hoWhite,这个名字中的ho表示“马”,真有点强人所难。举上实际存在的例子,在WindowsAPI中,如果你看到:LPCITEMIDLISTpidlRoot;想要一眼看明白pidRoot,必须的要求是你很明白ITEMIDLIST是什么玩意儿了。是的,Windows的API使用的是最后一种方法。在大多数情况下,它的变量的名字都看上去怪怪的。在本部教程中,我们在正式程序中,最常使用的方法是简单的“驼峰”法。5.1.4如何初始化变量5.1.4.1什么时候需要给变量初始化?inta;声明了一个整型变量a。但这变量的值是多少?a等于0吗?还是等于100?我们都不知道。“不知道”的意思是:a有值,但这个值的大小是随机的,所以我们无法确定。无法确定一个变量值是常有的事,比如我们要求用户输入他的年龄。我们需要声明一个整型变量来存储用户年龄,但在用户输入之前,我们是无法确认它的值。但有些时候,我们可以事先给一个变量初始时的值。同样是年龄的问题,虽然我们不知道用户到底几岁,但我们知道他不可能是0,所以我们把年龄一开始设为0。为什么要这样?用户有时不小心忘了输入年龄(就像我们在网上填表一样),我们就可以检查年龄是否为0来发现了。另外一种相反的用法是,我们发现大都数用户是8岁(比如一个小学生入学登记表),这时我们初始化年龄变量为8,目的是为了方便用户了。那么,如果为一个变量赋值呢?答案就像我们初中的代数:设x=10,y=100。用等号。请记住:现实生活中,等号(=)有两个意义,但在C/C++里,=只用来给一个变量赋值。5.1.4.2初始化变量的两个时机1.在定义时初始化变量inta=0;通过一个等号,我们让a的值等于0;同时定义多个变量时也一样:inta=0,b=1;当然也可以根据需要,只给部分变量初始化。inta=0,b;或:inta,b=1;2.在定义以后赋值inta;a=100;5.1.4.3通过计算得到初始值给变量赋值,除了给一个直接的值以外,还可以通过计算获得。如:inta=-3+200-5;或者如:inta=9;intb=3;intc=a/b;(/表示除号)现在来试试给变量赋值的几种方法。......intmain(intargc,char*argv[])]{/////////////////定义变量////////////////////////////////////////////////////以下定义三个变量:a,b,cinta;doubleb,c;//用cout输出三个变量:couta=ab=bc=cendl;/////////////////初始化变量////////////////////////////////////////////////intd=0;floate=1.234,f;f=567.8+0.2;coutd=de=ef=fendl;getchar();return0;}5.1.4.4变量的取值范围1).变量允许取值范围=变量数据类型的范围关于赋值的最后一个需要注意的是:变量的取值范围。变量的取值范围?变量是有类型的,变量的允许的取值范围等同于其数据类型的范围。比如一个整型数,那么它的取值范围就是:-2147483648~2147483647。而如果是一个字符类型,它的取值就不能是-129。以下是示例:inta=3000000000;//错误!cha
本文标题:第五章CC++语言变量和常量
链接地址:https://www.777doc.com/doc-2188827 .html