powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
3 сообщений из 3, страница 1 из 1
Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
    #38142039
Qeeet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
Не укладывется в голове, после завершения рекурсий (т.е.контроль передаеться на if(ii==1){return 0;})
наступает цикл for где уже j=1. В итоге мы имеем измененный массив bool а[]={1,0}.
Если кратко, то следующий код выводит на экран:
a[]= 00
a[]= 10
a[]= 10
a[]= 10
a[]= 11
a[]= 11
0.

Я ожидал такой результат:
a[]= 00
a[]= 10
a[]= 10
a[]= 00
a[]= 01
0.

Тут я попробовал обьяснить что шаг за шагом происходити в машине:
1. Defining a[2]{0,0}; ii=0; aj=0
2. Calling function func(a,ii,aj) |func({0,0},0,0)|
3. func({0,0},0,0) defining w=0; static aa=0
4. func({0,0},0,0) if(0) returns aa=1
5. func({0,0},0,0) for j=0
6. func({0,0},0,0) for Outputing "00", because a[2]={0,0}, look (1).
7. func({0,0},0,0) for if(!0) | because a[0]=0| returns w+=func(a,ii+1,j) |func({0,0},0+1,0)| and calls func({0,0},1,0)
8. func({0,0},0,0) for if func({0,0},1,0) defining w=0
9. func({0,0},0,0) for if func({1,0},1,0) if(1) returns a[0]=1, because of static aa=1, см 4.
10. func({0,0},0,0) for if func({1,0},1,0) for j=0
11. func({0,0},0,0) for if func({1,0},1,0) for Outputing "10", because of a[2]={1,0}, look row #9
12. func({0,0},0,0) for if func({1,0},1,0) for if(!1) |because a[0]=1|
13. func({0,0},0,0) for if func({1,0},1,0) for j=1
14. func({0,0},0,0) for if func({1,0},1,0) for Outputing "10"
15. func({0,0},0,0) for if func({1,0},1,0) for if(!0) |because a[1]=0|
16. func({0,0},0,0) for if func({1,0},1,0) for if if(1==1) |because ii=1, func({0,0},ii,0)|
17. func({0,0},0,0) for if func({1,0},1,0) for if if return 0
18. func({0,0},0,0) for if w=0 |because func({1,0},1,0) gives 0|
19. func({0,0},0,0) for j=1

И с этого момента мне не понятно почему так происходит:
20. func({0,0},0,0) for Outputing "10"
Почему так происходит, если в функцию передають аргументы, которые должны копироваться, включая a[2]={0,0}. Но какраз только массив а[2] не копируется
Я ожидал этого:
20. func({0,0},0,0) for Outputing "00"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#include <iostream>
 
using namespace std;
 
int func(bool a[],int ii,int aj)
{
    int w=0;
    static bool aa=0;
    if(aa){a[aj]=1;}else{aa=1;}
        for(int j=0;j<2;j++)
        { 
            cout<<"a[]= "<<a[0]<<a[1]<<endl;
            if(!a[j])
            {
                if(ii==1){return 0;}
                else{w+=func(a,ii+1,j);}
            }
        }
    return w;
}
 
int func()
{   
    bool a[2];
    for(int i=0;i<2;i++)a[i]=0;
    int ii=0,aj=0;
    return func(a,ii,aj);
}
 
void main()
{
    cout<<func();
    getchar();getchar();
}



Но если я определю массив a[2] как вектор, то все работает на ура.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
#include <iostream>
#include <vector>
 
using namespace std;
 
int func(vector<bool> a,int ii,int aj)
{
    int w=0;
    static bool aa=0;
    if(aa){a[aj]=1;}else{aa=1;}
        for(int j=0;j<2;j++)
        { 
            cout<<"a[]= "<<a[0]<<a[1]<<endl;
            if(!a[j])
            {
                if(ii==1){return 0;}
                else{w+=func(a,ii+1,j);}
            }
        }
    return w;
}
 
int func()
{   
    vector<bool> a(2);
    for(int i=0;i<2;i++)a[i]=0;
    int ii=0,aj=0;
    return func(a,ii,aj);
}
 
void main()
{
    cout<<func();
    getchar();getchar();
}
...
Рейтинг: 0 / 0
Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
    #38142147
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой для себя разницу между объектом и указателем (каковым и является массив).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
    #38142216
Qeeet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое,
я все уже понял.
Вы не представляете сколько я намучался с этим :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]