进度日志23(静态局部变量static,寄存器变量register,全局变量extern)

学习笔记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是全局变量,不然这个程序就用不了*/

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值