(二)变量
变量的存储类型:"动态储存"、"静态储存"。
1.动态储存变量:在程序执行过程中,函数调用它时才分配存储单元,使用完毕立即释放,多次
调用,则反复分配和释放存储单元。
属于动态储存变量的储存类型有:auto(自动变量)、register(寄存器变量)。
(1)auto(自动变量):auto变量均为局部变量,在赋初值前,其值是不确定的。对于同一函数两次
调用之间,自动变量的值不保留,因为动态存储变量多次调用时,反复分配和释放存储单元。
(2)register(寄存器变量):该类型变量是直接存储在CPU中的寄存器中,所以访问速度极快。
不同系统对register 变量个数有限制。
2.静态储存变量:在程序编译时就分配存储单元并一直保持不变,直到整个程序结束。
属于静态储存变量的储存类型有:extern(全局变量)、static(静态变量)。
(1)extern(全局变量):在程序编译时就分配存储单元直至程序结束,没有初始化的全局变量,默认初始值为0。
(2)static(静态变量):静态变量通常做局部变量,在编译时分配存储空间,若不初始化,默认初始值为0;对于函数多次调用中,静态变量具有继承性,即本次调用的初值是上次调用结束时变量的值。
定义变量的完整形式为:
存储类型说明符 数据类型说明符 变量名1,变量名2,…;
//变量的存储类型演示:static
利用static静态变量的"保值"功能求1!+2!+3!+…+n!
#include<stdio.h>
int fac(int n)
{
static int t = 1; //static类型变量的值具有继承性
t = t * n; //当实参为i=1,t=1*1;i=2,t=1*2;i=3,t=2*3;i=4,t=6*4;i=5,t=24*5
return t;
}
int main()
{
int i, n, sum = 0;
printf("求1!+2!+3!+…+n!,请输入n的值:");
scanf_s("%d", &n);
for (i = 1; i <= n; i++) //假设n=5
{
sum = sum + fac(i); //for 循环,sum=sum+t
} //i=1,sum=0+1;i=2,sum=1+2;i=3,sum=3+6;i=4,sum=9+24;i=5,sum=33+120
printf("计算结果为:%d", sum);
return 0;
}