为什么输出不同? (将数组放入函数问题中)

时间:2019-07-05 13:21:53

标签: c++11

我希望输出为:1 2 2 2

但是为什么输出:1 2 3 4

此代码有什么问题?

#include <iostream>
using namespace std;

int arr[] = {0};

int pluss(int ar[],int a){
ar[0]++;
cout<<ar[0]<<endl;
if(a==0){
    pluss(ar,a+1);
    pluss(ar,a+1);
    pluss(ar,a+1);
    }
}

int main() {
pluss(arr,0);
return 0;
}

编辑:那么,“ ar”是全局的,而不是局部于一个子函数?如何使“ ar”仅局限于一个子函数?我的意思是:第一个加号(ar,1)中的“ ar”不同于第二个加号(ar,2)中的“ ar”吗?

2 个答案:

答案 0 :(得分:1)

您的代码等效于:

int main() {
pluss(arr,0);
pluss(arr,1);
pluss(arr,1);
pluss(arr,1);
return 0;
}

由于每次调用pluss肯定会增加数组元素,因此在打印之前,预期输出为1、2、3、4。

答案 1 :(得分:0)

  

如何使“ ar”仅出现在一个子函数中?

如果您不希望将每个数组元素都作为整数值 ,则可以将数组包装在struct中,因为结构是通过值而不是通过引用传递的。 / p>

#include <iostream>
using namespace std;

struct s { int a[1]; } arr = {0};

int pluss(struct s ar, int a)
{
    ar.a[0]++;
    cout <<ar.a[0] <<endl;
    if (a==0)
    {
        pluss(ar, a+1);
        pluss(ar, a+1);
        pluss(ar, a+1);
    }
}

int main()
{
    pluss(arr, 0);
    return 0;
}