目录
前言
相信各位未来编程行业的预备大佬们在看了上一篇文章后,对常量已经有了初步的认识。我们在编写程序时遇到最多的除了各种常量之外还有就是各式各样的变量,那么这个变量又是什么呢?为什么会存在变量呢?变量又该如何使用呢?接下来咱们就来讲讲变量。
1.变量的定义
C语言中的变量是指在程序运行期间其值可以发生改变的量,用于从外部接收数据、保存一些不断变化的值、保存中间结果及最终结果。
1)变量的定义的格式:数据类型 变量名,变量名,....;
2)定义变量的时候通常要对其赋初值0,赋初值这一步骤叫做变量的初始化。
3)变量必须先声明后使用
int a;//对变量进行声明
a = 0;//对变量进行赋值
int a = 0;//声明+赋值=对变量进行初始化
//int是数据类型,a是变量名
2.变量的分类
变量可以分为:全局变量(外部变量)、静态全局变量、静态局部变量和局部变量(内部变量)。
1)按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。
2)按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失,只有程序结束后才释放内存;局部变量在定义它的函数内有效,但是函数返回后失效。 全局变量和静态变量如果没有人为初始化,则由编译器初始化为0。局部变量如若无人使其初始化则由编译器初始化为随机值。
- 关于局部变量作用域的几点说明:
1.主函数中定义的变量只能在主函数中使用。(主函数也是函数,同其他函数是平行的关系)
2.形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
- 形参变量:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。
- 实参变量:全称为"实际参数"是在调用时传递给函数的参数,即传递给被调用函数的值。
实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参,这一步称为传参。
传参分为传值传参和传址传参:
- 传值传参:形参是实参的一份临时拷贝,函数运行起来后,形参是形参,实参是实参,形参和实参没有任何关联性,改变形 参时,不会对实参造成任何影响。
- 传地址传参:形参是实参地址的一份拷贝,形参指向的实体是实参,对形参解引用后,拿到的内容就是实参,因此对形参解引用之后的内容进行修改,改变的就是实参。
#include<stdio.h>
int add(int x, int y)//x,y为形参变量
{
return x + y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int sum = add(a, b);//a,b为实参变量
printf("sum=%d\n", sum);
return 0;
}
3.允许在不同的函数中使用相同变量名,它们之间互不干扰。
4.在复合语句中也可以定义变量,其作用域只在复合语句范围内。
(1)、复合语句即把多个语句用括号{}括起来组成的一个语句。
(2)、在程序中应把复合语句看成是单条语句,而不是多条语句,例如{x=y+z;a=b+c;printf(%d%d,x,a);}是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾;此外,在括号“}”外不能加分号。
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
if (i == 4) { int x = 5; int sum = x + i; printf("sum=%d\n", sum); }
//x,sum就是定义在复合语句内部的局部变量
return 0;
}
- 关于全局变量的几点说明:
1.外部变量(全局变量)定义必须在所有的函数之外,且只能定义一次。
其定义的一般形式为:[extern] 类型说明符 变量名,变量名,...;extern可以省略,但是在同一项目的其他源文件中要想使用它,必须用extern进行声明。
2.外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此在不必要时尽量不要使用全局变量。
3.在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用或者说当全局变量名和局部变量名冲突时,优先使用局部变量。
3.变量的存储区域
1)变量存储区域分为动态存储区,静态存储区,寄存器存储区;其中寄存器存储也属于动态分配。
2)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。比如全局变量就属于此种存储方式。
3)动态存储变量是程序执行过程中,使用它时才分配存储单元使用完毕立即释放。函数的形式参数就是典型的例子。
4.变量的4种存储类型说明
1)auto 自动变量(定义变量时通常省略)
2)register 寄存器变量(寄存器变量是存储在CPU寄存器中,寄存器运算速度远高于内存,但是寄存器数量少,造价高)
3)extern 外部变量
4)static 静态变量
自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。
因此变量说明的完整形式应是:存储类型说明符 护具类型说明符 变量名,变量名,,,;
例如:static int a,b;//a,b为静态类型变量
extern int x,y;//说明x,y为外部整形变量
auto char c1,c2;//c1,c2为自动字符变量