变量是C程序执行过程中用以临时存储数据的存储单元。每个变量都有一个类型,用来说明变量所存储数据的种类(包括char, int, float, double等)。
在使用变量之前,首先要对变量进行定义。使用当前文件中没有定义的变量,需要事先声明变量的存在。定义变量的时候建议同时为该变量指定初始值,对变量进行初始化。在执行过程中可以通过赋值改变变量中存储的值。
变量的定义和初始化
在使用变量之前,必须进行定义,否则在编译过程中,程序就会报错。例如下面的C程序拟要输出变量height的值,然而在调用语句之前,height并没有被定义,所以编译时就出现了`height’ undeclared错误。
/***********************************
*使用变量前未定义,编译不通过 *
*variable.c *
***********************************/
#include <stdio.h>
int main()
{
printf("%d\n", height);
return 0;
}
变量的定义是根据变量的类型在内存中为变量分配内存空间。在定义的过程中进行初始化是一个非常好的习惯。如果没有初始化变量而且在使用前也没有为其赋值,那么C程序运行的结果可能是非常奇怪而且难以调试的。下面例子中定义了变量height,类型为float。
/***********************************
*variable.c *
*定义变量未初始化 *
***********************************/
#include <stdio.h>
int main()
{
float height;
printf("%f\n", height);
return 0;
}
编译运行上面的C程序,由于gcc
编译器默认将未初始化的基本类型的变量赋值为0,因此输出结果为0.000000。然而并不是所有的编辑器都是这样,有些编辑器可能用分配空间各位的当前状态组成变量的值,因此得到的变量的值也是随机的。在利用gcc
编译C程序时加上选项-Wall
,可以显示更多的检测信息。加上-Wall
选项编译上例,显示出`height’未初始化的警告信息。
在变量定义的时候为其赋予有效的初始值,可以避免出现由于未初始化造成的问题。
/***********************************
*variable.c *
*定义变量并初始化 *
***********************************/
#include <stdio.h>
int main()
{
float height = 10.0f;
printf("%f\n", height);
return 0;
}
变量的声明
如果在编写C程序时需要引用在其他代码文件中定义的变量,则在使用该变量前,首先要对这个变量进行声明。
/***********************************
*variable.c *
*声明变量而不存在定义该变量的外部文件 *
*报链接错误 *
***********************************/
#include <stdio.h>
int main()
{
extern float height;
printf("%f\n", height);
return 0;
}
声明的作用是:当编译器编译到这里时,它会告诉编辑器该变量是存在的,已在某个文件中定义,编译器就会顺利通过而不会产生变量未声明的错误。在链接阶段,这个C程序文件对应的目标代码就会查找所有文件中有这个变量定义的目标代码进行链接,如果找不到该变量的定义就会报链接错误。
创建一个定义变量height的文件external_height.c。将variable.o与external_height.c编译后的目标代码链接,则由于存在了变量height的定义,链接正常。
/*****************************
* external_height.c *
* 定义变量height的文件 *
*****************************/
float height = 10.0f;
声明的外部变量也不是随便定义的,它必须在函数调用时和声明处的代码一起处于内存空间中,满足这个要求的变量必然是全局变量。
/*****************************
* external_height.c *
* 定义变量height的文件 *
* height为局部静态变量 *
*****************************/
void localHeightDefine()
{
static float height = 10.0f;
}
变量的赋值
变量的赋值是向变量所指的内存空间写入不同的值,进而修改变量的值。下例中初始化height变量为10.0,然后又为其赋值20.0,将height的值修改为20.0
/**************************************
*variable.c *
*通过赋值修改变量的值 *
**************************************/
#include <stdio.h>
int main()
{
float height = 10.0f;
printf("height: %f\n", height);
height = 20.0f;
printf("height: %f\n", height);
return 0;
}
参考文献
- K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社
- http://blog.chinaunix.net/uid-23193900-id-3179232.html