变量是以用户定义的标识符为名字、其值可以改变的数据。一个变量在内存中占据一定的存储单元,在该存储单元中存放变量的值。变量的示意图如图2-7所示,程序中的变量具有变量名sum、变量值200和代表变量的存储单元三要素。
图2-7 变量的示意图
变量名在C语言程序中与该存储单元的地址对应。在对程序编译、连接时由编译系统给每一个变量分配对应的内存地址。从变量中取值,实际上是通过变量名找到对应的内存地址,再从该存储单元中读取数据。
选择变量名和其他标识符时,应做到“见名知意”,即选有含意的英文单词(或其缩写),并且在单词的前面加上数据的类型简写作为标识符。通常,字符型以“c”开头,整型以“i”开头,单精度浮点型以“f”开头,字符串类型以“sz”开头,从而方便对变量进行识别。如iCount,fTotal, cSex, szStudentName等。除了数值计算外,程序中一般不要用代数符号(如a,b,c,xl, yl等)作变量名,以增加程序的可读性。为简单起见,本书在简单的举例中,仍用单字符的变量名(如a,b,c等),请读者注意不要在其他所有程序中都如此。
1.变量定义语句
变量定义语句的一般格式为:
例如:
在同一程序中,变量名不允许被重复定义。例如:
2.变量赋初值
变量使用“=”赋初值。程序中,常需要对一些变量预先设置初值。C语言规定,变量名在定义时可以赋初值。例如:
另外,可以给被定义变量的一部分赋初值。例如:
定义iSum, iCount为整型变量,只对iSum初始化,值为0。编程规范中规定,所有变量在使用前都必须初始化。
如果对几个变量赋相同的初值,不能写成:
而应写成:
变量的初始化不是在编译阶段完成的(只有第7章中介绍的静态局部变量和全局变量的初始化是在编译阶段完成的),而是在程序运行本函数时赋以初值的,相当于有一个赋值语句。例如:
相当于:
(www.daowen.com)
C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。这样规定的目的如下。
(1)凡未被事先定义的变量,C编译系统不把它作为变量名,以保证程序中变量名使用正确。例如,如果在定义部分写了:
而在执行语句中利用赋值语句给变量赋值时错写成:
在编译时检查出studemt未定义,不作为变量名,因此输出“Undefined symbol studemt in function main”(变量studemt未经定义)的信息,便于用户检查错误,避免变量名使用时出错。
(2)每一个变量被指定为一个确定类型,在编译时为其分配相应的存储单元。假设定义num,total为int型,如果所用的编译系统是Microsoft Visual C ++ 2010学习版,则为num和total各分配4个字节,并按整型数据的存储格式存储数据。
(3)每一变量属于一个类型,便于在编译时据此检查该变量所进行的运算是否合法。例如,整型变量a和b,可以进行求余运算:a%b。如果将a, b指定为实型变量,则不允许进行求余运算,在编译时会指出有关出错信息。
例2.1 整型变量定义及赋初值。
编写程序:
创建一个名为“eg2_1.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
例2.2 字符型变量定义及赋初值。
编写程序:
创建一个名为“eg2_2.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
注意:C语言中没有专门的字符串变量。如果需要保存字符串,则应该使用字符数组。
3.变量的作用域
按变量作用域的不同,将变量分为局部变量和全局变量。在函数内部说明的变量称为局部变量,局部变量一般在函数的开始说明,但也可以在复合语句(由一对花括号{}所包括的语句)中定义和使用。在函数之外定义的变量称为全局变量(也称为外部变量)。
关于变量的作用域、生命周期等其他特性,将在第7章详细介绍。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。