c - 这个逻辑是如何工作的: k+=(x=5,y=x+2,z=x+y) ;
问题描述
这个逻辑是如何工作的: k+=(x=5,y=x+2,z=x+y);
它将如何给出结果 k == 22。当我初始化 k = 10 的值时
#include <stdio.h>
int main()
{
int x,y,z,k=10;
k+=(x=5,y=x+2,z=x+y);
printf("value of k %d ",k); //why it will show value of k =22
return 0;
}
解决方案
在赋值语句的右侧,使用了逗号运算符(从左到右依次两次)。它的值是最后一个操作数的值。所以这个说法
k+=(x=5,y=x+2,z=x+y);
为了清楚起见,可以重写为
k+=( ( x = 5, y = x + 2 ), z = x + y );
实际上等价于下面的一组语句
x = 5; // x is set to 5
y = x + 2; // y is set to 7
z = x + y; // z is set to 12
k += z; // k is set to 22
来自 C 标准(6.5.17 逗号运算符)
2 逗号运算符的左操作数被评估为 void 表达式;在它的求值和右操作数的求值之间有一个序列点。然后对右操作数求值;结果有它的类型和值。
推荐阅读
- linux - 查找过去 x 天内未访问的文件
- postgresql - PostgreSQL,插入功能,检查值是否存在并在插入时在 NEW 中传递该行的值
- sql - 按日期 Hive 计算单个组每月的事务数
- javascript - 匹配特定 html 标记之外的文本
- javascript - React-smooth-scrollbar溢出插件不起作用
- c++ - 迭代器生命周期
- r - y 轴格式问题(从 1e+01 更改)
- asp.net - 基于角色的授权失败
- amazon-web-services - 将应用程序迁移到 AWS Kinesis Firehose 和 AWS s3 多个表
- python - 调整张量大小以与其他层连接