首页 > 解决方案 > 赋值运算符和 c

问题描述

#include <stdio.h>

int main()
{
   int i,j;
   i=j=(22,23,24);
   printf("i:%d",i);
   printf("\nj:%d",j);
}

这将 i,j 的输出都设为 24。

#include <stdio.h>

int main()
{
   int i,j;
   i=j=22,23,24;
   printf("i:%d",i);
   printf("\nj:%d",j);
}

这将 i,j 都设为 22。有人可以解释背后的术语吗?TIA

标签: cassignment-operator

解决方案


赋值运算符=的优先级高于逗号运算符,

C 运算符优先级 - cppreference.com

在这份声明中

i=j=(22,23,24);

(22,23,24)首先计算。和被逗号运算符忽略,它被评估22为。然后,结果被赋值给,值也被赋值给。232424ji

另一方面,在这份声明中

i=j=22,23,24;

i=j=22首先计算。这分配22j,然后将值分配给i。之后,赋值运算符的求值结果22和整数文字23被逗号运算符忽略。最后,表达式被评估为 value 24,它也被忽略了。


推荐阅读