有关register变量和static变量的区别和联系
题目:输出1到5的阶乘用static变量的情况:
#include<stdio.h>
void main()
{
long fac(long);
long i;
for(i=1;i<=5;i++)
printf("%ld!=%ld\n",i,fac(i));
}
long fac(long n)
{
static long f=1;
f=f*n;
return(f);
}
可以得到正确结果
用register变量
#include<stdio.h>
void main()
{
long fac(long);
long i;
for(i=1;i<=5;i++)
printf("%ld!=%ld\n",i,fac(i));
}
long fac(long n)
{
register long f=1;
f=f*n;
return(f);
}
不能得到正确结果
问题:如果说,register和static的区别仅在于register是寄存器变量,可以提高运行效率。那么,既然作为寄存器变量的register,为什么不能替代static,毕竟他俩都是存取变量,只不过存取变量的地方不同而已?麻烦大家看看,谢谢。