关于C#:如何存储本地静态变量


How does the local static variables are stored

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

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

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

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


1
That is because of SCOPE

作用域是代码中可以访问变量的区域或部分。有可能

  • 文件范围
  • 功能范围
  • 块范围
  • 程序范围
  • 原型范围
  • 例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include<stdio.h>
    #include<conio.h>

    void function1()
    {
        printf("In function1
    "
    );
    }

    static void function2()
    {
        printf("In function2
    "
    );
        {
            int i = 100;
    Label1:
            printf("The value of i =%d
    "
    ,i);
            i++;
            if(i<105)
            goto Label1;
        }
    }

    void function3(int x, int y);

    int main(void)
    {
        function1();
        function2();
        getch();
        return 0;
    }

    在这个例子中,

    • "function1()"具有"program scope"。
    • "function2()"具有"file scope"。
    • "label1"具有"函数作用域"。(标签名称在功能。"label"是唯一具有函数作用域的标识符。
    • 变量"i"具有"block scope"。
    • 变量"x"和"y"具有"原型范围"。不能有两个函数参数列表中名为"x"或"y"的变量。

    它只是编译器和链接器实现的一个规则。一方面,在不同的函数中,可以有多个同名的静态变量。