4. 赋值

定义了变量之后,我们要把值存到它们所表示的存储空间里,可以用赋值(Assignment)语句实现:

  1. char firstletter;
  2. int hour, minute;
  3. firstletter = 'a'; /* give firstletter the value 'a' */
  4. hour = 11; /* assign the value 11 to hour */
  5. minute = 59; /* set minute to 59 */

注意变量一定要先声明后使用,编译器必须先看到变量声明,才知道firstletterhourminute是变量名,各自代表一块存储空间。另外,变量声明中的类型表明这个变量代表多大的一块存储空间,这样编译器才知道如何读写这块存储空间。还要注意,这里的等号不表示数学里的相等关系,和1+1=2的等号是不同的,这里的等号表示赋值。在数学上不会有i=i+1这种等式成立,而在C语言中表示把变量i的存储空间中的值取出来,再加上1,得到的结果再存回i的存储空间中。再比如,在数学上a=77=a是一样的,而在C语言中后者是不合法的。总结一下:定义一个变量,就是分配一块存储空间并给它命名;给一个变量赋值,就是把一个值保存到这块存储空间中。变量的定义和赋值也可以一步完成,这称为变量的初始化(Initialization),例如要达到上面代码的效果也可以这样写:

  1. char firstletter = 'a';
  2. int hour = 11, minute = 59;

在初始化语句中,等号右边的值叫做Initializer,例如上面的'a'、11和59。注意,初始化是一种特殊的声明,而不是一种赋值语句。就目前来看,先定义一个变量再给它赋值和定义这个变量的同时给它初始化所达到的效果是一样的,C语言的很多语法规则既适用于赋值也适用于初始化,但在以后的学习中你也会了解到它们之间的不同,请在学习过程中注意总结赋值和初始化的相同和不同之处。

如果在纸上“跑”一个程序(每个初学编程的人都要练这项基本功),可以用一个框表示变量的存储空间,在框的外边标上变量名,在框里记上它的值,如下图所示。

图 2.1. 在纸上表示变量

在纸上表示变量

你可以用不同形状的框表示不同类型的变量,这样可以提醒你给变量赋的值必须符合它的类型。如果所赋的值和变量的类型不符会导致编译器报警告或报错(这是一种语义错误),例如:

  1. int hour, minute;
  2. hour = "Hello."; /* WRONG ! */
  3. minute = "59"; /* WRONG !! */

注意第3个语句,把"59"赋给minute看起来像是对的,但是类型不对,字符串不能赋给整型变量。

既然可以为变量的存储空间赋值,就应该可以把值取出来用,现在我们取出这些变量的值用printf打印:

  1. printf("Current time is %d:%d", hour, minute);

变量名用在等号左边表示赋值,而用在printf中表示把它的存储空间中的值取出来替换在那里。不同类型的变量所占的存储空间大小是不同的,数据表示方式也不同,变量的最小存储单位是字节(Byte),在C语言中char型变量占一个字节,其它类型的变量占多少字节在不同平台上有不同的规定,将在第 15 章 数据类型详解详细讨论。