3

我想从函数访问分配给主函数中全局变量的值。我不想在函数中传递参数。

我试过参考不同的堆栈溢出类似的问题和 C++ 库。

#include <iostream>

long s;  // global value declaration

void output()  // don't want to pass argument
{
    std::cout << s;
}

int main()
{
    long s;
    std::cin >> s;  // let it be 5
    output()
}

我希望输出是,5但它显示0

4

5 回答 5

5

要访问全局变量,您应该::在它之前使用符号:

long s = 5;          //global value definition

int main()
{
    long s = 1;              //local value definition
    cout << ::s << endl;     // output is 5
    cout << s << endl;       // output is 1
}

s使用 global in也很简单cin

cin >> ::s;
cout << ::s << endl;

在线尝试

于 2019-05-18T05:19:15.253 回答
2

您在 main 函数中声明了另一个变量 s 。代码的第 7 行。它是cin中使用的变量。要么删除该行,要么在 s 之前使用 ::。

long s;
cin >> ::s; //let it be 5
output();
于 2019-05-18T05:22:18.377 回答
1

重要的是要知道,在文件范围内声明的局部变量s和在文件范围内声明main()的变量s并不相同,尽管名称相同。

由于s在函数main() 阴影中声明的局部变量(请参阅作用域 - 名称隐藏)全局变量s,您必须使用作用域解析运算符 ::来访问s在文件作用域中声明的全局变量:

#include <iostream>

long s;

void output()
{
    std::cout << s;   // no scope resolution operator needed because there is no local
}                     // s in output() shadowing ::s

int main()
{
    long s;           // hides the global s
    std::cin >> ::s;  // qualify the hidden s
    output()
}

...或摆脱本地smain().

也就是说,使用全局变量(没有真正需要)被认为是非常糟糕的做法。请参阅什么是“静态初始化顺序‘惨败’?. 虽然这不会影响POD,但它迟早会咬你。

于 2019-05-18T05:33:17.787 回答
0

您可以简单地在全局变量之前使用:: 或删除

long s; 

从 main() 因为您在 main() 函数中声明局部变量 s 。尽管名称相同,但 Global s 和 local s 是不同的。让我们通过给局部变量和全局变量赋予不同的名称,通过以下示例了解更多信息。

    #include <iostream>

long x;  // global value declaration

void output()  // don't want to pass argument
{
    std::cout << x;
}

int main()
{
    long s;
    std::cin >> s;  //here you are storing data on local variable s
    output() // But here you are calling global variable x. 
}

在 main() 函数中,s 是局部变量,x 是全局变量,您在 output() 函数中调用全局变量。如果你有相同的命名,你可以使用::(范围解析运算符)在 main 中调用 global x ,或者如果它们有不同的名称,则只需通过变量名调用它。

PS: 如果您有任何问题,请发表评论,希望这会对您有所帮助并了解错误所在。在此处阅读有关局部和全局变量范围的更多信息

于 2019-05-18T06:22:18.423 回答
-1

首先,当你声明一个全局变量而不赋值时,它会自动将它的值设置为 0。

还有一件事,你应该知道你的范围。main 函数中的变量 s 在输出函数中不存在。

在输出函数中,您得到 0,因为您的全局变量设置为 0。

您可以通过为其分配不同的值来更改全局变量的值。

long s; //global value declaration
void output() //don't want to pass argument
{
   cout<<s;  
}
int main()
{
   cin>>s; //let it be 5
   output()
}
于 2019-05-18T05:29:02.333 回答