如何存储本地静态变量

时间:2013-11-28 04:57:41

标签: c

如果我将全局变量声明为静态变量,它将存储在数据段中。并且该文件中的所有函数都可以访问它。到目前为止没有问题......

如果在函数内部声明了一个静态变量,如下所示:     int foo()     {       static int a;       。       。     }

所以这个变量“a”也存储在数据段中(如果我错了,请纠正我。)

我的问题是,如果可以跨函数访问存储在数据段中的全局静态变量。 但是函数内部定义的静态变量也存储在数据段中,不能跨函数访问,为什么?

2 个答案:

答案 0 :(得分:2)

That is because of SCOPE

范围是可以访问变量的代码的区域或部分。可以

  1. 文件范围
  2. 功能范围
  3. 块范围
  4. 计划范围
  5. 原型范围
  6. 实施例

    #include<stdio.h>
    #include<conio.h>
    
    void function1()
    {
        printf("In function1\n");
    }
    
    static void function2()
    {
        printf("In function2\n");
        {
            int i = 100;
    Label1: 
            printf("The value of i =%d\n",i);
            i++;
            if(i<105)
            goto Label1;
        }
    }
    
    void function3(int x, int y);
    
    int main(void) 
    {
        function1();
        function2();
        getch();
        return 0;
    }
    

    在示例中,

    • 'function1()'具有'程序范围'。
    • 'function2()'有'文件范围'。
    • 'Label1'具有'功能范围'。 (标签名称必须是唯一的 功能。 'Label'是唯一具有功能范围的标识符。
    • 变量'i'具有'Block Scope'。
    • 变量'x'和'y'具有'原型范围'。不可能有两个 函数参数列表中名为“x”或“y”的变量。

答案 1 :(得分:1)

它只是编译器和链接器实现的规则。首先,您可以在具有相同名称的不同函数中使用多个静态变量。