在C中同时分配给两个指针

Assigning to two pointers at the same time in C

我有一小段 C 代码让我有点困惑。

int *p, *q, arr[4]={5,8,3,7}
p = q = arr;

指针赋值是否意味着pq都等于arr?或者 p 等于 q 等于 arr?这已经困扰我一段时间了,感谢任何帮助

赋值运算符 (=) 是右结合的。这意味着

a = b = c;

解析为

a = (b = c);

c的值赋值给b,本次赋值操作的结果值赋值给a.

= 运算符定义为 return 分配的值,因此这有效地将 ab 都设置为 c

pq 最终都指向 arr(或者更恰当地说 &arr[0],它在更高级的场景中有所不同)。在处理值语义时,这两种表达方式都是等效的,就像在 C 中处理指针值时一样。

更一般地说,在 C 语言中,= 运算符生成分配给其左侧操作数的值,因此您可以链接任何类型的赋值。