gpt4 book ai didi

c - 在 C 中,为什么包含逗号(,)运算符的表达式(语句)的工作方式不同

转载 作者:太空狗 更新时间:2023-10-29 17:05:41 24 4
gpt4 key购买 nike

我有一个简单的 C 代码,但对包含逗号 (,) 运算符的表达式很困惑。

int main(){
int i=0,j=11,c;
c=i=j,++i;
printf("c=%d i=%d\n",c,i);
c=(i=j,++i);
printf("c=%d i=%d\n",c,i);
return 0;
}

上面的代码打印:

c=11 i=12
c=12 i=12

我的问题是:

  1. 逗号 (,) 作为运算符的实际工作是什么?
  2. ++,= 有更高的优先级,为什么要对逗号左边的表达式求值?
  3. 如果一个表达式包含具有不同优先级的运算符,顺序是什么,它是否取决于逗号(,)?
  4. 它的行为是否像分号 (;) 的替代品?

最佳答案

赋值运算符的优先级高于逗号运算符。因而表达

c = i = j, ++i;

相当于

( c = i = j ), ++i;

根据 C 标准(6.5.17 逗号运算符)

2 The left operand of a comma operator is evaluated as a void expression; there is a sequence point between its evaluation and that of the right operand. Then the right operand is evaluated; the result has its type and value.114)

在上面的表达式中,逗号运算符的结果被丢弃,但它有增加 i 的副作用。

在这个表达式中

c = ( i = j, ++i );

由于使用括号,您更改了上述表达式的计算顺序。现在它相当于

c = ( ( i = j ), ++i );

和变量 c 根据上面列出的 C 标准中的引用获取表达式 ++i 的值。

关于c - 在 C 中,为什么包含逗号(,)运算符的表达式(语句)的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35767679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com