我不知道有任何运算符在 C 中以这种方式工作。根据上下文,C 中的 & 符号可能意味着许多不同的东西。
地址操作符
就在左值之前,例如
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
}
按位与
C 中与符号的另一种用法是执行按位与。它类似于逻辑 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)当两个 & 符号放在后面时,r-value 引用一种。2)当两个&符号放在模板类型或自动扣除类型之后时的通用引用。
我认为由于某种扩展,您的代码可能仅在您的编译器中编译。我在想这个https://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C但我怀疑是这样。