对于一个变量来说,不同的声明方式变量的作用域也不同。
变量根据其作用域的范围可以分为两种:局部变量和全局变量。
局部变量
定义:在函数体内定义的变量
声明:数据类型 变量名
*static 数据类型 变量名 为静态局部变量 未赋值是值为0
作用范围:只在函数体内部有效,一旦出了在函数体外就无效。
function1()
{
int x = 1;
}
function2()
{
int x = 2;
}
在这两个函数中有相同变量x,但它们各作用于自己的函数体内所以它们互不相关。
*当主函数在调用别的函数时定义相同变量,主函数中的变量不会影响被调用函数中的变量。其局部变量的作用域只在自己函数体的内部。
*局部变量在使用时才会分配内存的地址空间(堆栈中)。(存放区域可以查看我的博客里进程的概念里)
*局部变量定义时需要赋初值。
全局变量
定义:在函数外定义的变量
声明方式:extern 类型说明符 变量名(extern 可以省略不写)
作用范围:作用于全局,整个代码内
#include <stdio.h>
extern int x = 1; //等价于 int x = 1;
function()
{
x = x +1;
}
mian()
{
int y =2;
x = y + x;
function();
printf(“x = %d\n”, x);
}
该代码段中x为全局变量,会影响主函数和function函数中的x,最终的输出结果为x = 4。
*全局变量在编译是就已经分配到了内存空间。(存放区域可以查看我的博客里进程的概念里)
*外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而降低了函数的独立性。
*static 数据类型 变量名 为静态全局变量 与全局变量一样未赋初值是未0 静态全局变量作用于文本内,而全局变量可作用于文本外。