当静态变量被声明两次时会发生什么?

时间:2014-02-03 15:21:55

标签: c static

    #include <stdio.h>
    void func();

    int main()
    {
        static int b = 20;
        func();
    }

    void func()
    {
        static int b;
        printf("%d", b);
    }

输出:0

在声明第二个静态变量时是否创建了新的内存位置?

6 个答案:

答案 0 :(得分:4)

是的。您的每个b变量都是声明它们的函数的私有变量。

答案 1 :(得分:1)

  

在声明第二个静态变量时是否创建了新的内存位置?

是。 bmain中的变量func虽然名称相同,但它们都不同。 static关键字仅更改变量的生命周期而非其可见性。

答案 2 :(得分:1)

b中的{p> funcb中的main是两个不同的变量,它们不相关,它们的范围在它们所在的每个函数中。

答案 3 :(得分:1)

在函数中声明变量时

编译器首先查看当前函数中的局部变量

然后如果找不到它寻找全局变量

答案 4 :(得分:1)

是为上面两个静态变量创建了新的内存位置。

对于abov代码,函数调用中定义的每个静态变量都具有函数本身的作用域。

参见

Static and global variable in memory

答案 5 :(得分:1)

“b”变量私有,因为它们用于“function”。唯一的全局变量可以使用一次,但您可以使用相同的本地变量无限次。 例-  在此示例中,我声明全局变量私有变量

#include <iostream>
using namespace std;

int second() ;
int main()
{
    char number;
    cout << "Please input a value\n"; 
    cin >> number;
    cout << " You selected: " << number; 
    second(); // This should work in a C program, how do I do it in C++
    system("PAUSE");
    return 0;
}

int second();
{
    char number;
    cout << "Please select another value...";
    cin >> number;
    cout << "You selected: " << number;
}