c++定义全局变量
C++ Defining Global Variable
很简单的问题:我正在摆弄基本的c++(对编程非常陌生),我在声明一个全局变量来做一些加法时遇到了麻烦
#include <iostream>
int x,y;
int sum(int, int)
{
return x + y;
}
int main()
{
using namespace std;
cout << "The sum of 10 and 4 is: " << sum(10,4) << endl;
return 0;
}
将"int x,y;"更改为"int x,y = 0"具有相同的结果:总和等于0。有人能解释一下这种奇怪的行为吗?谢谢!
你的函数总是返回全局变量x
和y
的和,它们总是0
。x
和y
在程序启动时隐式设置为零。你永远不会改变它们的值,所以它们永远是零。两个0的和是0,这一点也不奇怪。
你将10
和4
传递给你的函数,但是函数本身完全忽略了传递给它的内容,即它忽略了它的参数(它们甚至没有命名)。它总是对全局x
和y
求和,它们总是0
。
如果你想让你的函数求和它的参数,你必须命名函数的形参并使用它们
int sum(int a, int b)
{
return a + b;
}
现在你根本不需要任何全局变量。(main
保持原样)
或者,如果你愿意,你也可以完全去掉参数,把全局变量相加
int x,y;
int sum()
{
return x + y;
}
但是在这种情况下,你必须通过这些全局变量传递值来求和,而不是作为函数参数
int main()
{
using namespace std;
x = 10;
y = 4;
cout << "The sum of 10 and 4 is: " << sum() << endl;
return 0;
}
后一种方法在这里只是为了说明目的。这绝对不是一个好的编程习惯。
你的代码是这两种方法的奇怪的不连贯的混合,这是不可能工作的。
为了解决这个问题,需要改变的是sum函数。
int sum(int a, int b){
return a+b; //a,b here are referring to the inputs, while what you did was referring to the global variable..
}
此外,尽量不要使用全局变量,通常会给您带来很多麻烦。
另一件事,我不认为你定义函数的方式是正确的。输入必须像这样:
int sum(int a, int b)
除非你想先声明函数,然后提供实际的实现,否则你不应该错过输入的名称!
当您只是全局声明变量x,y时,它们隐式地设置为零值。在函数定义中,您只是给出了args的数据类型,而不是args的名称。所以当你返回x y的和时,它返回0。而main函数传递的值不去任何地方。您的程序必须像这样
#include<iostream>
int x,y;
int sum(x,y)
{
return x+y;
}
int main()
{
int v,a,b;
cout<<"values of a and b";
cin>>a>>b;
v=sum(a,b)
cout<<"their sum is"<<v;
}
when you explicitly define the value in second case
。e int x,y=0;
你只是显式地将值y赋值为0而x隐式地保持为0由于你没有给出参数名,函数最终返回的结果是0
似乎你只需要x和y在你的add函数中,所以把它们放在函数的本地。没有理由让它们全球化。遵循"最低可访问性"的习惯用法,以防止程序的其他部分错误地修改变量。
你可能需要一个全局变量,假设你想定义一个众所周知的参数,每个函数都需要知道,但在运行时可以修改。如果你想要固定它,那么一个全局常量会更合适。
希望对你有帮助。
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 包括一个类来定义全局变量参数 c++ :(
- 访问另一个.cpp文件中的.cpp文件中定义的全局变量
- 在主循环外部多个文件上定义全局变量
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 全局使用变量定义和C 声明
- 如何访问从C 编译的动态库中定义的全局变量
- 即使在定义类后也无法在C++中声明全局变量?
- 我们可以通过使用 "dot" 运算符在类之外定义类变量来制作全局变量吗?
- 当在其中定义全局变量时,如何在.cpp中包含 C 样式的 .h
- 在 main() 中定义全局变量
- 如何管理多个文件、全局变量和定义
- C 使用c库,其中包含标题文件中定义的全局变量
- 从定义变量的位置以外的程序中检索 C 全局变量
- 我可以在 MFC 应用程序中定义全局变量的位置
- 如何在if/else序列中定义未知类型的全局变量
- GCC链接器抱怨对现有全局变量的未定义引用
- 当 f & g 修改相同的全局变量时,表达式 f() 的值是否> g() 未定义或未指定?
- 将全局变量定义为散列