如何使用 C++ 中的函数访问全局变量?
How can i access global variable using function in c++?
我想从函数中访问分配给主函数中全局变量的值。我不想在函数中传递参数。
我尝试引用不同的堆栈溢出类似问题和 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
.
要访问全局变量,您应该在其前面使用 ::
符号:
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
}
另外在cin
中使用global s
也很简单:
cin >> ::s;
cout << ::s << endl;
您正在主函数中声明另一个变量 s。您的代码的第 7 行。它是在 cin 中使用的变量。删除该行或在 s.
之前使用 ::
long s;
cin >> ::s; //let it be 5
output();
首先,当您声明一个全局变量而不赋值时,它会自动将其值设置为 0。
还有一件事,你应该了解你的范围。你的主函数中的变量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()
}
重要的是你要知道在 main()
中声明的局部变量 s
和在文件范围内声明的变量 s
尽管名称不同。
由于在函数main()
中声明了局部变量s
shadows(见Scope - Name Hiding) the global variable s
you have to use the Scope Resolution Operator ::
访问全局变量s
在 file-scope:
声明
#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()
}
... 或去掉 main()
.
中的本地 s
也就是说使用全局变量(没有实际需要)被认为是非常糟糕的做法。看What’s the “static initialization order ‘fiasco’?. While that doesn't affect POD它迟早会咬你一口。
你可以简单地在全局变量前使用::或者直接删除
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 中调用全局 x ,或者如果它们有不同的名称,则只通过变量名调用它。
PS: 如果您有任何问题,请留下评论,希望这会帮助您并了解错误所在。阅读有关局部和全局变量范围的更多信息 here
您在全局范围内定义了 output(),这意味着它将引用全局范围内的 long s 变量,而不是 main() 中定义的 long s。
我想从函数中访问分配给主函数中全局变量的值。我不想在函数中传递参数。
我尝试引用不同的堆栈溢出类似问题和 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
.
要访问全局变量,您应该在其前面使用 ::
符号:
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
}
另外在cin
中使用global s
也很简单:
cin >> ::s;
cout << ::s << endl;
您正在主函数中声明另一个变量 s。您的代码的第 7 行。它是在 cin 中使用的变量。删除该行或在 s.
之前使用 ::long s;
cin >> ::s; //let it be 5
output();
首先,当您声明一个全局变量而不赋值时,它会自动将其值设置为 0。
还有一件事,你应该了解你的范围。你的主函数中的变量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()
}
重要的是你要知道在 main()
中声明的局部变量 s
和在文件范围内声明的变量 s
尽管名称不同。
由于在函数main()
中声明了局部变量s
shadows(见Scope - Name Hiding) the global variable s
you have to use the Scope Resolution Operator ::
访问全局变量s
在 file-scope:
#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()
}
... 或去掉 main()
.
s
也就是说使用全局变量(没有实际需要)被认为是非常糟糕的做法。看What’s the “static initialization order ‘fiasco’?. While that doesn't affect POD它迟早会咬你一口。
你可以简单地在全局变量前使用::或者直接删除
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 中调用全局 x ,或者如果它们有不同的名称,则只通过变量名调用它。
PS: 如果您有任何问题,请留下评论,希望这会帮助您并了解错误所在。阅读有关局部和全局变量范围的更多信息 here
您在全局范围内定义了 output(),这意味着它将引用全局范围内的 long s 变量,而不是 main() 中定义的 long s。