Почему выход отличается?(помещая массив в проблему функции) - PullRequest
0 голосов
/ 05 июля 2019

Я хочу, чтобы вывод был: 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" был локальным только для одной дочерней функции?Я имею в виду: «ар» в первом плюсе (ар, 1) отличается от «ар» во втором плюсе (ар, 2)?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Ваш код соответствует:

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

Поскольку каждый вызов pluss определенно увеличивает элемент массива, перед его печатью ожидаемый результат равен 1, 2, 3, 4.

0 голосов
/ 05 июля 2019

как сделать так, чтобы "ar" был локальным только для одной дочерней функции?

Если вам не нравится передавать каждый элемент массива как целочисленное значение , вы можете заключить массив в struct, поскольку структуры передаются по значению, а не по ссылке.

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...