помогите сообразить код...
- Войдите на сайт для отправки комментариев
Втр, 13/11/2018 - 19:08
привет всем!
сразу скажу - к сожалению, не программист :)
есть код обработчика энкодера,
val_change = encoder_selection(menu_number_1, menu_number_2, menu_items_limit);
функции encoder_selection соотв следующий код:
boolean encoder_selection(int & x, int & y, int lim){ //main menu
if (value > last) {
x++;
y++;
if(x>lim)
{
x=0;
}
if(y>lim)
{
y=0;
}
last = value;
return true;
}else if(value < last){
y = menu_number_1;
x--;
if(x<0)
{
x=lim;
}
last = value;
return true;
}else {
return false;
}
}
получается, что часть кода в объявлении функции - int & x - передает значение х в переменную menu_number_1, а int & y передает значение в переменную menu_number_2, в то же время функции передается параметр menu_items_limit в переменную int lim? правильно понял?
не совсем так , в теле функции , перемнная int & x являеться ссылкой(reference) на переменную которую передали функции в момент ее вызова(menu_number_1 ).
изменяя значиение х в теле функции encoder_selection, вы меняете значение переменной menu_number_1 вне функции потому что int & x являеться ссылкой(reference) на menu_number_1 .И если ,допустим, во время исполнения этой функции ,случичилось бы прерывание , в обработчике которого проверяется значение menu_number_1 ,то он(обработчик) "увидел" бы уже измененную переменную в теле функции encoder_selection.
п.с. понял на основаннии недолгого гугления, надеюсь меня поправят в случае неточностей.
Все гораздо хуже. В функцию приходит указатель и модифицируется там. Изменяется не значение, а указатель, адрес переменной. Так что после вызова этой функции возможны любые спецэффекты.
Все гораздо хуже. В функцию приходит указатель и модифицируется там. Изменяется не значение, а указатель, адрес переменной. Так что после вызова этой функции возможны любые спецэффекты.
указатли и ссылки,не одно и тоже
https://www.tutorialspoint.com/cplusplus/passing_parameters_by_reference...
mixail844, а какая разница. Главное что ТС не программист. И скорее в программе отсутсвует какая то структура. Это как не строитель начал строить небоскреб и на каком-то этапе все сооружение превратилось в муравейник. Что делать дальше? Продолжать строительство или снести все на ***. И пригласить другого строителя с другим проектом здания.
Все гораздо хуже. В функцию приходит указатель и модифицируется там. Изменяется не значение, а указатель, адрес переменной. Так что после вызова этой функции возможны любые спецэффекты.
указатли и ссылки,не одно и тоже
https://www.tutorialspoint.com/cplusplus/passing_parameters_by_reference...
Так я же и пишу - всё гораздо хуже. C++ в целом не пользуюсь, только честным Си, поэтому со ссылкой напутал. Вижу, что разыменования нет - сразу неонка в голове замигала.