零基础趣学C语言
上QQ阅读APP看书,第一时间看更新

2.5 变量详解

变量就是可以变化的量,用来标记存储数据的内存空间,在尚未学习“指针”之前,只能通过变量操作内存空间,本章将从变量类型、变量名、变量值三个方面详细介绍变量。

2.5.1 定义变量

在C语言中,变量只有被定义才能使用,定义变量有两种形式。

第一种,先定义,后赋值。具体语法如下。

变量类型 变量名;

变量名 = 数据;

例如:

int a;     //先定义int型变量a

a =200;     //然后将200赋值给变量a

第二种,定义并赋值。具体语法如下。

变量类型 变量名=数据;

例如:

int a=200;   //定义int变量a并赋值为200

【变量说明】

1.在程序中变量是用来保存数据的,一般情况下,数据的类型与变量的类型保持一致。如果要保存整数,变量类型应该声明为int;如果要保存字符,变量类型应该声明为char;如果要保存小数,变量类型应该声明为float或double。如图2-27所示。

图2-27 变量类型

2.程序中的“=”是赋值操作,例如,a=200,表示将200赋值给变量a,并不是数学中的相等比较,C语言中相等比较采用“==”(后续章节中会介绍)。

3.变量名必须符合C语言标识符命名规则。

2.5.2 引用变量

定义变量的目的在于方便引用,在C语言中引用变量分为两种情况。

(1)对变量进行赋值。

(2)读取变量中保存的数据。

那么该如何区分这两种情况?其实很简单,如果变量出现在“=”左边,就是对变量进行赋值,例如,

a =100;

如果变量出现在“=”右边或单独出现,就是读取变量中保存的数据。例如:

a=100;

b=200;

a=b;

printf(“%d\n”,a);

上述程序的第3行中变量a在“=”左边,变量b在“=”右边。因此,a=b执行过程为:先读取变量b中保存的数据200,然后赋值给变量a,此时变量a的值为200。

上述第4行中在printf函数中变量a是单独出现的,表示读取变量a中保存的数据。

下面通过例子来了解变量的定义与引用。

【示例2-19】 变量定义与引用。

01 #include<stdio.h>

02 int main()

03 {

04   int a=100;        //定义int变量a并赋值为100

05   int b;          //先定义int变量b

06   b=200;          //然后将200赋值给变量b

07   a=b;           //将变量b的值赋值给变量a

08   printf("a=%d\n",a);   //输出变量a的值

09   printf("b=%d\n",b);   //输出变量b的值

10   getchar();

11   return 0;

12 }

运行结果如图2-28所示。

图2-28 运行结果

【程序分析】

1.上述程序的第4行中,定义int变量a并赋值为100。

2.第5~6行,先定义int变量b,然后将200赋值给变量b。

3.第7行,先读取变量b的值,然后赋值给变量a。

4.第8行,先读取变量a的值,然后打印输出。

5.第9行,先读取变量b的值,然后打印输出。

2.5.3 定义多个变量

通过学习【示例2-19】,我们已经看到在程序中可以定义多个变量。C语言中,定义多个变量有两种形式。

第一种, 在一行语句中,定义多个变量,语法结构为:

变量类型 变量名1,变量名2,变量名3……     //变量之间以逗号分割

第二种,多行语句,定义多个变量,语句结构为:

变量类型 变量名1;

变量类型 变量名2;

……

下面通过例子来了解在程序中如何定义多个变量。

【示例2-20】 定义多个变量。

01 #include<stdio.h>

02 int main()

03 {

04  int a=100,b=200;     //一行定义int变量a、b且赋值

05  int c=300;        //定义变量c且赋值

06  int d=400;        //定义变量d且赋值

07  printf("a=%d\n",a);

08  printf("b=%d\n",b);

09  printf("c=%d\n",c);

10  printf("d=%d\n",d);

11  getchar();

12  return 0;

13 }

运行结果如图2-29所示。

图2-29 运行结果

【程序分析】

1.上述程序的第4行中,一次定义两个int变量a、b并且分别赋值为100、200。

2.第5~6行,int变量c、d定义在2行中,并且分别赋值为300、400。

3.第7~10行,分别输出变量a、b、c、d的值。

2.5.4 变量的本质

变量本质上是一块有名字的内存空间。例如,int a=20。在程序运行期间,系统会根据变量的类型在内存中开辟对应大小的空间,保存20,并给这块空间起一个名称为a,如图2-30所示。

图2-30 变量的本质

理解变量的本质,需要深入了解以下两点。

(1)变量名a只是用来标记这块内存空间的,在程序中通过引用变量名a,就可以精准找到这块内存空间,然后访问该内存空间的数据20。

(2)变量值就是变量名标记的内存空间中的数据,变量值在程序运行期间是可以修改的。为了深入理解这个概念,读者可以把内存空间想象为一个盒子,把变量值想象为不同水果。当盒子中放的是苹果时,打开盒子看到的就是苹果,当盒子中放的是橘子时,打开盒子看到的就是橘子。盒子只是一个固定大小的容器,而盒中的水果是可以随时替换的。同理,变量也是如此,对应内存空间是固定的,而空间中的数据是可以随时修改的。

2.5.5 语句与语句块

在C语言中,程序执行的最小单位为语句,一条合法的语句必须在末尾有一个分号,分号是语句不可缺少的组成部分。

C语言中常用的语句有以下5种。

(1)赋值语句。

(2)函数调用语句。

(3)空语句。

(4)复合语句(语句块)。

(5)控制语句。

本小节只介绍前4种语句,第5种控制语句会在后续章节中单独介绍。

1. 赋值语句

赋值语句是C语言程序中最基本的语句,需要使用赋值符号“=”,该符号的作用是将一个数据赋值给一个变量,例如:

a = 100;        //将100赋值给变量a

注意: 赋值语句中,赋值号“=”的左边必须是变量,不能是常量,否则程序编译时会报错。

2. 函数调用语句

函数调用语句是C语言程序中,比较常用的语句,由函数调用语句与分号构成,例如:

printf("www.rupeng.com");

该语句由函数调用printf("www.rupeng.com")与末尾的分号构成,后续章节中会详细介绍函数,对于该语句暂时只需简单了解即可。

3. 空语句

该语句只有一个分号,例如:

;

那它有什么作用呢?空语句经常作为循环语句的循环体,表示什么也不做。

4. 复合语句(语句块)

复合语句又被称为语句块,在程序中,使用{ }将多行语句括起来就可以成为复合语句,例如:

{

  int a=3;

  printf("a=%d\n",a);

}

左花括号“{”表示复合语句开始,右花括号“}”表示复合语句结束。复合语句不会影响程序的正常执行,常常和控制语句一起使用。

说明: 本书默认将复合语句称为语句块。

下面通过例子来简单了解语句块的使用。

【示例2-21】语句块的使用。

01 #include<stdio.h>

02 int main()

03 {

04 {

05   int a=300;

06   printf("a=%d\n",a);

07 }

08 getchar();

09 return 0;

10 }

运行结果如图2-31所示。

图2-31 运行结果

【程序分析】

(1)上述程序的第4行中,左大括号“{”表示程序块开始,第7行中,右大括号“}”表示程序块结束。

(2)第4~7行之间的语句为一个程序块,可以认为这些语句是一个整体,这种理解方式,对后续学习控制语句非常重要。

(3)根据输出结果可以看到,单独出现的语句块并不会影响程序的执行。

2.5.6 顺序结构

顺序结构是C语言程序中最简单的程序结构。顺序结构的程序从第一行语句开始,按照代码排列的顺序,从上至下逐句执行,上一条语句执行结束下一条语句才能执行,直到最后一条语句结束。顺序结构执行流程如图2-32所示。

图2-32 顺序结构执行流程图

下面通过例子来了解顺序程序结构。

【示例2-22】 顺序结构。

01 #include<stdio.h>

02 int main()

03 {

04  int a=10;

05  printf("a=%d\n",a);

06  a=20;

07  printf("a=%d\n",a);

08  a=30;

09  printf("a=%d\n",a);

10  getchar();

11  return 0;

12 }

运行结果如图2-33所示。

图2-33 运行结果

【程序分析】

本例程序是一个典型的顺序结构程序,计算机会按照语句排列的顺序从上至下依次执行,直到执行到return 0;主函数结束。