局部变量:定义在一个函数内部,只在本函数范围内有效。
全局变量:在函数外定义,为本文件所有函数共用。
int p,q 整个程序中p,q均有效
int f(a)
int a;
{
int b;
int c;
} 只在 f()中a,b,c有效
float f1(x)
{
int i;
int j;
} 只在 f1()中x,i,j有效
main()
{
int m;
int n;
} 只在 main()中m,n有效
程序中p,q为全局变量;a,b,c,x,i,j,m,n均为局部变量。
如果全局变量和局部变量重名,则在局部变量有效的区域全局变量无效。
变量类型
一、动态存储
1.自动变量(auto):未加存储类型说明的均为自动变量,他的存储方式为动态存储,使用它时才为它分配存储空间,当调用结束,就释放存储单元,所以它的值不能保留。
2.寄存器变量(register):这个变量和其他不同,它是放在寄存器中,使用时直接从寄存器中读写,提高效率。
二、静态存储
3.外部变量(extern):在一个函数体中如果有extern int a;说明a变量已经在其它文件中定义,函数可以不用再次定义直接使用;
4.静态变量(static):生存周期为整个程序
例:
#include<stdio.h>
int func(int a)
{
auto int b = 0;
static int c = 3;
b = b + 1;
c = c + 1;
return(a + b + c);
}
int main()
{
int a = 2;
int i;
for(i = 0; i < 3; i++)
{
printf("%d",func(a));
}
printf("\n");
return 0;
}
用gdb分步输出过后可看到b的值一直为1,c的值为4,5,6.程序运行结果为7,8,9.静态变量就好比每次在执行一次循环时把b的值重赋为零,它的值是固定的。