Другие языки программирования и технологии

Язык Arduino(C, C++) Нужна помощь: в изучении arduino встретил знак "&" помогите, пожалуйста, что он означает!

X7
Xxxxx 77777
557
Двойной (&&) - значит логическое "И":

если (Вася->Пьян && Вася->Барагозит) Менты. Приехать ()
И что характерно приедут.
if (5 > 2 && 7<4) НихренаНеПризойти ();

Одинарный & в функции или при объявлении:
int a = 2;
int& s = a;
a = 8;
Вывести (s); //выведет 8, ибо оба по сути одно и то же, названное разными именами.

В функциях такая же тема:
void f(int a, int&b) { a = 3; b = 8}
int A = 4; int B = 2;
f(A, B);
Вывести (A, B); // Выведет 4, 8

Одинарный & с уже имеющимся элементом вернет ссылку на него.
int a = 3;
int* b = &a; // звездочка как раз и значит ссылку, теперь b - ссылка на а.
//Получить из этой ссылки а, можно разименовав ссылку:
(*b) = 22;
Вывести (а) //выведет 22.

Ну и никто не запрещает получать ссылку на ссылку на ссылку на ссылку на ссылку... Солженицын бы слюной захлебнулся от удовольствия.
auto c = &b;
auto d = &c;
auto e = &d;
int***** f = &e; =)

Одинарный & между двумя элементами : побитовое сравнение. Пишу в двоичной системе:
byte a = 01101111;
byte b = 11011001;

byte c = a & b;
Вывести (с); выведет:

с = 01001001;

a = 01101111;
b = 11011001;
(это тут для наглядности, всё сравнилось поразрядно)

Как-то так. Всё зависит от ситуации. А еще этот оператор можно переопределить, но это уже совсем другая история.
Л.клышев Ожббм Л.клышев Ожббм
Л.клышев Ожббм Л.клышев Ожббм
16 778
Лучший ответ
Андрей Трофимов &b вернет не ссылку, а указатель. Ссылка в С++ совсем другое, в С ссылок нет.
Xxxxx 77777 Спасибо, помог)
В С это логическое И
NE
Nurtay Elemesov
48 987
В Си-подобных языках один и тот же оператор может очень многое означать.
Иные операторы вообще можно перегрузить.
Поэтому вне контекста ничего он не значит.

Если это в условии (if), то использовать & нежелательно, лучше &&, так как он более оптимизирован: если 1 условие ложно, то второе он не проверяет, а сразу делает false.
Это не только удобно в некоторых случаях (например, когда сперва проверяем переменную на nullptr, а затем проверяем в ней еще что-то - надо, чтобы если nullptr, то второе условие не проверялось), но и чуть-чуть быстрее работает.
Зависит от контекста. Если используется в описании типа, то означает ссылку:

int i;
int &ref = i;
ref = 5; // same as i=5

если как бинарная операция (над двумя операндами), то битовое И (часто используется как маска, в ардуино особенно):

byte a = b & 0xF0; // reset 4 lower bits

если как унарная операция, то взятие адреса:

int i;
int *pi = &i;
*pi = 5; // same as i = 5
вариантов много: побитовое И, взятие адреса или ссылка
VN
Vitaliy Novak
680