Какова цель '&' при передаче bool в качестве параметра функции?
Если я использую эту функцию без &
перед change_x
(в параметре функции), change_x
никогда не изменится на false и продолжит печатать навсегда. Зачем мне нужен &
?
void some_function(bool &change_x, int pin_x) {
if (change_x == true) {
delay(time_delay);
if (digitalRead(pocket_pin_1) == HIGH) {
Serial.print("State 1");
}
else {
Serial.println("state 2");
}
change_x = false;
}
}
@Prakhar Pradeep, 👍0
2 ответа
Как всегда в C++, аргумент по умолчанию передается по значению (как и в старом добром C). Используя '&' вы можете передать его по ссылке. Таким образом, вы копируете не значение переменной в метод, а исходную переменную с возможностью ее изменения внутри функции, и она будет отражать изменения вне функции.
Возможно, вы можете вставить больше кода, чтобы мы увидели, как переменная передается в функцию. Например, вызов some_function(true, 3)
бесполезен.
Но в любом случае это не вопрос, специфичный для Arduino, а вопрос stackoverflow.
Если у вас есть логическое значение b, вы обычно присваиваете ему значение true или false. Если вы передаете в функцию логическое значение (или целое число, символ и большинство других простых типов), создается копия. Поэтому, если вы измените его в функции, то при возврате функции копия будет уничтожена, а исходное значение сохранится.
Однако вам не нужна копия, поэтому вам нужна ссылка (указатель) на это логическое значение. Вот где & это для. Таким образом, bool &change — это не логическое значение, а ссылка на логическое значение. Всякий раз, когда вы меняете эту ссылку, исходное значение логического значения изменяется, чего вы и хотите.
Обратите внимание: это функция C++, она не существует в C (вместо этого вы используете указатели: bool* изменить).
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Как работать с аналоговыми контактами в цикле?
- Какие есть другие IDE для Arduino?
- Как использовать переменные и функции в нескольких файлах .ino
- Разница между void setup() и void setup(void)
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?