Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Не укладывется в голове, после завершения рекурсий (т.е.контроль передаеться на 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. Но если я определю массив 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 16:25 |
|
||
|
Будучи аргументомфункции, массив a[2] не копируется при вызове этой функции
|
|||
|---|---|---|---|
|
#18+
Открой для себя разницу между объектом и указателем (каковым и является массив). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 17:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38142147&tid=2020464]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 535ms |

| 0 / 0 |
