学习笔记1:static变量(静态)
静态局部变量占内存,存在于整个程序中,在编译时进行,以后每次调用函数时直接使用上一次函数调用结束时的值,不再重新赋初值,但他十分忠贞,其他函数不能引用。如果不赋初值,系统自动给他赋值为0(对数值型变量)或空字符(对字符变量)。
自动变量(动态局部变量)占动态存储空间,用完就释放,轻轻地来轻轻地走,每调用一次函数重新给一次初值,相当于执行一次赋值语句。如果不赋初值,系统会随即给他一个不确定的值
编程:
#include <stdio.h>
int f(int a)
{
auto b = 0; //auto相当于auto int,也就是int,auto表示b是一个自动存储的临时变量
static c = 3; //static相当于static int,说明静态变量
b = b + 1; //b==1,1,1
c = c + 1; //c==4,5,6
return(a + b + c); //7 ,8 ,9
}
void main()
{
int a = 2,i;
for (i = 0; i < 3; i++)
{
printf("%d\n", f(a));
}
}
运行结果:
题目:输出1到5的阶乘值
答案:
#include <stdio.h>
int fac(int n)
{
static f = 1;
f *= n;
return f;
}
void main()
{
int i;
for (i = 1; i < 6; i++)
{
printf("%d!=%d\n", i, fac(i));
}
}
运行结果:
学习笔记2:register变量
如果有一些变量需要频繁使用(如使用一万次),为了提升效率,C将局部变量的值放在CPU的寄存器中(比放在内存里有效率),这种变量叫做 寄存器变量 ,用register声明
编程:输出1到n的阶乘值
#include <stdio.h>
int fac(int n) // 这次不用ststic特性,所以把阶乘的过程放在fac()函数中视线
{
register i, f = 1;
for (i = 1; i <= n; i++)
{
f *= i;
}
return f;
}
void main()
{
int i;
for (i = 1; i < 6; i++)
{
printf("%d!=%d\n", i, fac(i));
}
}
运行结果:
学习笔记3:用extern声明外部变量(全局变量)
编程:
#include <stdio.h>
int max(int x, int y)
{
int z;
z = x > y ? x : y;
return z;
}
void main()
{
extern A, B;
printf("%d\n", max(A, B));
}
int A = 13, B = -8; /*编译器是从上往下读的,如果把A和B定义在这里,那前面就要加上extern来表示A和B是全局变量,不然这个程序就用不了*/
运行结果: