关键字typedef和static

224 阅读1分钟

关键字typedef

typedef顾名思义是类型定义,这里可以理解为类型重命名。

image.png

关键字static

在c语言中,static是用来修饰变量和函数的

  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数

修饰局部变量

#include <stdio.h>
void test()
{
    int a =1;
    a++;
    printf("%d",a);
}

int main()
{
    int i = 0;
    while (i<0)
    {
        test();
        i++;
    }
    return 0;
}

输出结果: image.png 局部变量a的生命周期是进入作用域直到作用域结束。main调用test函数时,a被赋值为1,随后a++,打印a的数值,此时a的值为2,最后生命周期结束,main函数重复调用test函数,但调用一次后a就销毁,所以a的值始终只用从1到2的过程,然后被销毁。

#include <stdio.h>
void test()
{
    static int a =1;
    a++;
    printf("%d",a);
}

int main()
{
    int i = 0;
    while (i<0)
    {
        test();
        i++;
    }
    return 0;
}

输出结果:

image.png

static修饰局部变量,局部变量出了作用域不被销毁,本质上,static修饰局部变量的时候,改变了变量的存储位置。影响了变量的生命周期,生命周期变长,和程序的生命周期一样。

image.png

修饰全局变量

image.png

当使用一个不在当前源文件的函数时,需要用extern声明该函数,才能使用。也反映出全局变量具有外部链接属性。

image.png 当static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。其他源文件(.c)就不能再使用到这个全局变量了。我们在使用的时候,就感觉作用域变小了。

修饰函数

image.png 不在一个头文件,可以声明外部函数进行调用,反映函数也是有外部链接属性的。

image.png 一个函数本来是具有外部链接属性的,但是被static修饰的时候,外部连接属性就变成了内部链接属性,其他源文件(.c)就无法使用了。

register

image.png

{
    //寄存器变量
        register int num = 3;
        //建议:3存放在寄存器中
    return 0;
}