C ++定义全局变量

时间:2014-08-20 02:11:45

标签: c++

非常简单的问题: 我正在摆弄基本的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。 有人能解释这种奇怪的行为吗?谢谢!

4 个答案:

答案 0 :(得分:2)

您的函数始终返回全局变量xy的总和,它们始终为0。程序启动时xy隐式设置为零。你永远不会改变他们的价值观,所以他们永远都是零。两个零的总和为零,这里不足为奇。

您将104传递给您的函数,但函数本身完全忽略传递给它的函数,即它忽略了它的参数(它们甚至没有命名)。它总是汇总全局xy,它们总是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,所以将它们放在函数的本地。没有理由让它们成为全球性的。遵循“最小可访问性”惯用法,以防止程序的其他部分错误地修改变量。

您可能需要一个全局变量,假设您要定义一个众所周知的参数,每个函数都需要知道并且在运行时可以修改。如果你想要它固定,那么全局常量会更合适。

希望有所帮助。

相关问题