C语言存储类型

    技术2022-05-19  23

    变量的存储类型是指变量值的内存类型。变量的存储类型决定变量何时创建、合适销毁以及它的值将保持多久。有三个地方可以用于存储变量:

      普通内存运行时堆栈硬件寄存器

     

    1.凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类变量成为静态变量。我们无法为它们指定其他存储类型。静态变量在程序运行之前创建,在程序的整个执行期间始终存在。始终保持原先的值,除非给他赋值一个不同的值或者程序结束。

    2.在代码块内部声明的变量的缺省存储类型是自动的,也就是说它存储于堆栈中,成为自动变量。有个关键字auto就是用于修饰这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。在程序执行到声明自动变量的代码块时,自动变量才被创建,当程序的执行流离开代码块时,这些自动变量便自行销毁。如果该代码块被数次执行,这些自动变量每次都将重新创建。如果给变量加上static,可以使它的存储类型从自动变量变为静态。函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。

    3.关键字register可以用于自动变量的声明,提示他们应该改存储于机器的硬件寄存器而不是内存中,这类变量称为寄存器变量。效率较高。寄存器变量的创建和销毁时间和自动变量相同,但需要一些额外的工作。寄存器先前存储的值必须恢复,确保调用者得寄存器变量未被破坏。

    想想下面这个程序各个变量的作用域、存储类型、链接属性


    int  a=5;

    extern int b;

    static int c;

    int d(int e)

    {

         int f=15;

         register int b;

         static int g=20;

         extern int a;

        ……

        {

            int e;

            int a;

            extern int h;

             ……

         }

        ……

        {

           int x;

           int e;

           ……

        }

    ……

    }

    static int i( )

    {

        ……

    }

    ……



    最新回复(0)