Mir ist kein Operator bekannt, der so in C funktioniert. Je nach Kontext kann das Und-Zeichen in C viele verschiedene Dinge bedeuten.
Adressoperator
Kurz vor einem L-Wert, z.B.
int j;
int* ptr = &j;
In dem obigen Code, ptr speichert die Adresse j, & in diesem Zusammenhang ist unter der Adresse jedes lvalue. Der Code unten hätte mir mehr Sinn gemacht, wenn er so geschrieben wäre.
static int varOne;
static int varTwo;
static int varThree;
static void *arr[1][8432] = { { &varOne,&varTwo, &varThree } };
Logisches UND
Die logische UND-Operator ist einfacher, im Gegensatz zu den Betreiber über, es ist ein binärer Operator, dh es einen linken und rechten Operanden erfordert. Die Art, wie es funktioniert, besteht darin, den linken und rechten Operanden auszuwerten und wahr zurückzugeben, wenn beide wahr sind, oder größer als 0, wenn sie nicht bool sind.
bool flag = true;
bool flag2 = false;
if (flag && flag2) {
// Not evaluated
}
flag2 = true;
if (flag && flag2) {
// Evaluated
}
bitweise UND
Eine weitere Verwendung der Et-Zeichen in C, führt eine bitweise AND. Es ist ähnlich wie der logische UND-Operator, außer dass es nur ein kaufmännisches Und verwendet, und führt eine UND-Operation auf der Bit-Ebene durch.
Nehmen wir an, wir haben eine Reihe haben und dass es in die binäre Darstellung abbildet unten gezeigt, die AND-Operation funktioniert wie folgt:
0 0 0 0 0 0 1 0
1 0 0 1 0 1 1 0
---------------
0 0 0 0 0 0 1 0
In C++ Land, werden die Dinge komplizierter. Das kaufmännische Und kann nach einem Typ platziert werden, um einen Referenztyp zu bezeichnen (Sie können es sich als weniger leistungsfähigen aber sicheren Zeiger vorstellen), dann wird die Sache noch komplizierter mit 1) r-Wert-Referenz, wenn zwei Und-Zeichen gefolgt werden eine Art. 2) Universalreferenzen, wenn zwei Et-Zeichen nach einem Schablonentyp oder einem automatisch abgezogenen Typ platziert werden.
Ich denke, dass Ihr Code wahrscheinlich nur in Ihrem Compiler aufgrund einer Erweiterung einiger Arten kompiliert. Ich dachte an diese https://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C, aber ich bezweifle, dass das der Fall ist.
Das ist nicht ein '&&' aber zwei '&'. Und ungültig in C, weil das Ergebnis von '&' kein gültiger Ausdruck für ein anderes '&' ist. Sicher, das ist kein C++ Code ?? – Olaf
Das sieht irgendwie aus wie GCC's [computed gotos] (https://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Labels-as-Values.html). Sind die Bezeichnungen "varOne", "varTwo" und "varThree"? – user2357112
@ user2357112: Guter Punkt. Wieder einmal hätte ein [McVE] geholfen. – Olaf