我希望输出为: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”吗?
答案 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;
}