大话C语言
上QQ阅读APP看书,第一时间看更新

2.2 常量与变量

C语言中的常量与变量,首先从名字上就能清楚地看出它们之间这种互斥的关系。“常”有恒久的意思,即在C语言中能够保持恒久不变的量就叫作常量,反之,若其值能够发生变化就称为变量。下面先来看看C语言中都有哪些常量吧。

2.2.1 常量

常量通常都是以值的形式出现,我们之前所学的C语言的基本数据类型,都有与之对应的常量。另外,我们还会认识一个特殊的字符串常量。

1.整型常量

C语言中,任意的整数值都是整型常量,而且整数值可以采用八进制、十进制或十六进制的格式来书写。例如有一个整数值13,分别采用八进制、十进制和十六进制的格式来书写,如表2.6所示。

表2.6 整数值13的各种进制书写方式

还有一点需要知道,默认的整数值是int类型,即为标准整型常量,如果在整数的后面加上字母L(大小写均可),如“13L”,则它就是一个长整型常量了;如果在整数的后面加上字母U(大小写均可),如“13U”,则它就是一个无符号的标准整型常量了;甚至把这两个结合起来,如“13UL”,这就是个无符号长整型常量了。

2.实型常量

同样的,在C语言中,任何带有小数点的合法数值就是实型常量,如“2.0”,还可以是“2.”。哈哈,没写错!如果没有小数点,它就是整型常量,有了这个小数点,它就是个实型常量了。默认的实型常量都是double类型的,如果想要一个float类型的实型常量,在后面加上字母F(大小写均可)就可以了,例如“2.0F”或“2.f”。

3.字符常量

把一个字符用单引号包含起来就是字符常量,'a'、'B'、'5'、'\n',这些都是字符常量。使用字符常量的时候有三点需要注意:①单引号不能使用中文单引号,‘c’是错误的,'c'是正确的;②单引号中只能包含一个字符,'ab'是错误的。有的读者可能会说,之前看到有'\n',它怎么可以?其实单引号中所包含的“\n”只能算是一个字符,起到换行的作用,称为转义字符。C语言中用“\”作前缀的字符称为转义字符,也就是说紧跟在“\”之后的那个字符不再是普通字符,而是变为一个有着特殊意义的字符了,常用的一些转义字符见表2.7;③单引号中不能为空,''是错误的,而' '是正确的。不要惊讶,再仔细看看,后面的那个在两个单引号之间有空格字符,所以正确。

表2.7 常用的转义字符

由于字符类型本身可以看成是1字节的整型,所以字符常量与整型常量有时可以互换使用,例如字符常量'a'就可以看成整数常量97,其实就是字符所对应的ASCII码值。同样的,对于整数常量48,我们也可以把它当成字符常量'0'来使用。

4.字符串常量

在C语言里,是没有字符串这种数据类型的,但却有字符串常量。用英文双引号括起来的内容称为字符串常量或简称字符串,如"abc"、"123"、""。第一个是由3个小写字母组成的字符串;第二个是由3个数字字符组成的字符串;第三个比较特殊,双引号中没有任何内容,它是空字符串。回想一下,第1章的第一个C程序中,在调用printf函数的时候,就使用到了字符串,“printf("第一个C程序!\n");”,这个字符串是由一串中文字符和一个转义字符“\n”构成的。使用字符串的时候也需要注意两点:①双引号必须使用英文的符号,不可使用中文双引号;②字符串不可嵌套使用,即不能在一个字符串中又出现了另外一个字符串,如果想在字符串中使用双引号字符本身,需使用转义字符“\"”。字符串在程序中的使用极其广泛,在后面的学习中,我们会一直和它打交道。

2.2.2 变量

讲完了常量,现在该变量“粉墨登场”了,变量与常量除了在其值是否能发生变化上有区别之外,两者之间的形态也有所不同。常量通常都是以值的形式存在,而变量看上去却像一个“容器”。不同类型的变量就像不同大小的“容器”,里面可以放置不同类型和大小的数据。例如有一个字符型的变量,那么就可以在这个变量里面放置–128~127的某个整数;如果是一个短整型的变量,就可以在里面放置–32768~32767的某个整数;如果是一个无符号短整型的变量,就可以在里面放置0~65535的某个整数;如果是一个实型的变量,就可以在里面放置一个小数。是不是非常像一个“容器”?变量与常量还有一点不同,常量就是表示值本身,而变量通常拥有名字,我们把这个名字称为变量名。用户通过变量名可以非常方便地访问和操作变量里面所放置的数据。是不是很神奇?下面就来讲述如何定义一个变量。

1.变量的定义

C语言中变量的定义格式如下:

类型说明符  变量名;

其中“类型说明符”是用于说明所定义出的变量将来可以放置什么类型的数据,可以是我们前面讲过的C语言的基本类型,也可以是后面才会讲到的其他类型。“变量名”就是我们给变量所起的名字,不过起名字时有三个需特别注意的地方:①不能使用C语言里面的关键字作为变量名,所谓关键字就是C语言所规定的一些具有特殊意义的标识符。表2.8中列出了C语言中最经典的32个关键字。②变量名必须以字母或下画线“_”开头,不能以数字开头。③变量名不可重复定义。下面就试着定义几个变量吧。

表2.8 C语言经典32个关键字

下面再来几个有错误的。

C语言是区分大小写的,所以使用大小写不同的变量名是可以的,并不算重复,例如同样的三个字母可以定义出不同的变量名出来:“abc”“Abc”“aBc”“abC”“ABc”“aBC”“AbC”“ABC”,不过不建议这么用。

另外,还可以一次定义多个同类型的变量,变量名之间用逗号分隔,如:

int a, b, c;        //定义了3 个整型变量,变量名分别为a,b,c
2.变量的初始化与赋值

我们学会了如何定义一个变量,但现在这个变量的值是不确定的,如果想让这个变量拥有一个确定的值,就得对这个变量进行初始化或赋值的操作。这时就需要用到一个运算符“=”,小学就认识的“等于号”,但我们不该叫它“等于运算符”,而应把它称为“赋值运算符”,因为它在C语言中的作用不是用于判断等号两边的值是否相等,而是将右边的值赋给左边的变量。是不是非常像往容器里放置一些物品?如果把这种赋值的操作用在定义变量的同时,就称为变量的初始化:

int a = 100;  //定义整型变量a的同时将其值初始化为100

反之,如果不是在定义变量的时候进行赋值操作,就不是变量的初始化了,而只是普通的赋值操作:

int a;    //定义一个整型变量a,其值是未确定的
a = 100;  //将整型常量值100赋给变量a

现在知道初始化与赋值之间的区别了吧?既然已经遇到了赋值运算符,那就接着再来看看C语言中还有哪些其他的运算符吧。