c++定义全局变量

C++ Defining Global Variable

本文关键字:全局变量 定义 c++      更新时间:2023-10-16

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

你的函数总是返回全局变量xy的和,它们总是0xy在程序启动时隐式设置为零。你永远不会改变它们的值,所以它们永远是零。两个0的和是0,这一点也不奇怪。

你将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;
}

后一种方法在这里只是为了说明目的。这绝对不是一个好的编程习惯。

你的代码是这两种方法的奇怪的不连贯的混合,这是不可能工作的。

为了解决这个问题,需要改变的是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函数中,所以把它们放在函数的本地。没有理由让它们全球化。遵循"最低可访问性"的习惯用法,以防止程序的其他部分错误地修改变量。

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

希望对你有帮助。