C でこのように機能する演算子を私は知りません。コンテキストに応じて、C のアンパサンドはさまざまな意味を持ちます。
Address-Of 演算子
左辺値の直前、例えば
int j;
int* ptr = &j;
上記のコードでは、ptrは j のアドレスを格納します。このコンテキストでの & は、任意の左辺値のアドレスを取得しています。以下のコードは、そのように書かれていれば、私にとってより意味のあるものだったでしょう。
static int varOne;
static int varTwo;
static int varThree;
static void *arr[1][8432] = { { &varOne,&varTwo, &varThree } };
論理積
論理 AND 演算子は、上記の演算子とは異なり、より単純です。二項演算子であり、左右のオペランドが必要です。これが機能する方法は、左右のオペランドを評価し、両方が true の場合は true を返し、bool でない場合は 0 より大きいことです。
bool flag = true;
bool flag2 = false;
if (flag && flag2) {
// Not evaluated
}
flag2 = true;
if (flag && flag2) {
// Evaluated
}
ビット演算 AND
C でアンパサンドを使用するもう 1 つの方法は、ビットごとの AND を実行することです。アンパサンドを 1 つだけ使用し、ビット レベルで AND 演算を実行する点を除いて、論理 AND 演算子と似ています。
数値があり、それが以下に示すバイナリ表現にマップされていると仮定しましょう。AND 演算は次のように機能します。
0 0 0 0 0 0 1 0
1 0 0 1 0 1 1 0
---------------
0 0 0 0 0 0 1 0
C++ の世界では、事態はさらに複雑になります。アンパサンドは、参照型を示すために型の後に配置できます (あまり強力ではありませんが安全な種類のポインターと考えることができます)。その後、1) 2 つのアンパサンドが後に配置されると、r-value 参照でさらに複雑になります。タイプ。2) テンプレート タイプまたは自動推定タイプの後に 2 つのアンパサンドが配置されている場合のユニバーサル参照。
あなたのコードは、何らかの拡張機能により、おそらくコンパイラでのみコンパイルされると思います。私はこれを考えていましたhttps://en.wikipedia.org/wiki/Digraphs_and_trigraphs#Cしかし、そうではないかと思います。