在C中同时分配给两个指针
Assigning to two pointers at the same time in C
我有一小段 C 代码让我有点困惑。
int *p, *q, arr[4]={5,8,3,7}
p = q = arr;
指针赋值是否意味着p
和q
都等于arr
?或者 p
等于 q
等于 arr
?这已经困扰我一段时间了,感谢任何帮助
赋值运算符 (=
) 是右结合的。这意味着
a = b = c;
解析为
a = (b = c);
即c
的值赋值给b
,本次赋值操作的结果值赋值给a
.
=
运算符定义为 return 分配的值,因此这有效地将 a
和 b
都设置为 c
。
p
和 q
最终都指向 arr
(或者更恰当地说 &arr[0]
,它在更高级的场景中有所不同)。在处理值语义时,这两种表达方式都是等效的,就像在 C 中处理指针值时一样。
更一般地说,在 C 语言中,=
运算符生成分配给其左侧操作数的值,因此您可以链接任何类型的赋值。
我有一小段 C 代码让我有点困惑。
int *p, *q, arr[4]={5,8,3,7}
p = q = arr;
指针赋值是否意味着p
和q
都等于arr
?或者 p
等于 q
等于 arr
?这已经困扰我一段时间了,感谢任何帮助
赋值运算符 (=
) 是右结合的。这意味着
a = b = c;
解析为
a = (b = c);
即c
的值赋值给b
,本次赋值操作的结果值赋值给a
.
=
运算符定义为 return 分配的值,因此这有效地将 a
和 b
都设置为 c
。
p
和 q
最终都指向 arr
(或者更恰当地说 &arr[0]
,它在更高级的场景中有所不同)。在处理值语义时,这两种表达方式都是等效的,就像在 C 中处理指针值时一样。
更一般地说,在 C 语言中,=
运算符生成分配给其左侧操作数的值,因此您可以链接任何类型的赋值。