非常简单的问题: 我正在摆弄基本的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;
}
更改&#34; int x,y;&#34; to&#34; int x,y = 0&#34;具有相同的结果:总和等于0。 有人能解释这种奇怪的行为吗?谢谢!
答案 0 :(得分:2)
您的函数始终返回全局变量x
和y
的总和,它们始终为0
。程序启动时x
和y
隐式设置为零。你永远不会改变他们的价值观,所以他们永远都是零。两个零的总和为零,这里不足为奇。
您将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;
}
后一种方法仅用于说明目的。这绝对不是一个好的编程实践。
您的代码中包含的是这两种方法的奇怪断开混合,这些方法可能无法正常工作。
答案 1 :(得分:1)
为了解决这个问题,需要改变的是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)
除非您想先声明该功能并在以后提供实际实现,否则您不会错过输入的名称!
答案 2 :(得分:1)
当你只是全局声明变量x,y时,它们隐式设置为零值。在你的函数定义中,你只是给出了args的数据类型,而不是args names.so当你返回x的总和时, y,它返回零。主函数传递的值无处可去。 你的程序必须看起来像这样
#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
即int x,y=0;
你只是明确地将值y的值赋予0,而x隐含地保持为0,并且因为你没有给出args名称,所以最终结果返回biy函数为零,
答案 3 :(得分:0)
似乎你只需要在add函数中使用x和y,所以将它们放在函数的本地。没有理由让它们成为全球性的。遵循“最小可访问性”惯用法,以防止程序的其他部分错误地修改变量。
您可能需要一个全局变量,假设您要定义一个众所周知的参数,每个函数都需要知道并且在运行时可以修改。如果你想要它固定,那么全局常量会更合适。
希望有所帮助。