静态存储区 & 动态存储
auto static register extern
auto int b, c=3;
int b, c=3;
两者等价
f(int a)
{
atuo b = 0;
static c = 3;
b = b + 1;
c = c + 1;
return(a + b + c);
}
main()
{
int a = 2, i;
for(i = 0; i < 3; i++)
printf("%d",f(a));
}
运行结果:
7 8 9
static c = 3会在内存中不断叠加,而其他的类型会重新归位计算
一些变量频繁使用,存取变量需要花费不少时间。为提高执行效率,C语言允许将局部变量的值存放在CPU中的寄存器中
int fac(int n)
{
register int i, f = 1;
for(int i = 1; i <= n; i ++)
f = f * i;
return f;
}
main()
{
int i;
for(int i = 1; i <= 5; i++)
printf("%d != %d\n", i, fac(i));
}
不能把变量既放在静态存储区,又放在寄存器中,二者只能居其一
外部变量(既全局变量)是在函数的外部定义,它的作用域为从变量的定义处开始,到本程序文件的末尾
int max(int x, int y)
{
int z;
z = x > y ? x : y;
return (z);
}
main()
{
extern A,B;
printf("%d",max(A,B));
}
int A = 13, B = -8;
运行结果:
13
使用auto register static声明变量时,是在定义变量的基础上加上这些关键字,而不能单独使用
内部函数 & 外部函数:
此函数只能被本文件中的其他函数所调用,它称为内部函数
static int fun(int a, int b)
外部函数:extern int fun( int a, int b)