【问题标题】:Can anyone pls explain me in detail how this number got swaped step by step (comma operator) [closed]谁能详细解释一下这个数字是如何逐步交换的(逗号运算符)[关闭]
【发布时间】:2021-11-20 21:19:16
【问题描述】:
#include<stdio.h>
int main(void)
{
int a=8,b=7,temp;
printf(“a=%d, b=%d\n”,a,b);
temp=a,a=b,b=temp;
printf(“a=%d, b=%d\n”,a,b);
return 0;
}

谁能详细解释一下这个数字是如何一步一步交换的(逗号运算符)

【问题讨论】:

  • 在这种情况下,temp=a,a=b,b=temp; 等价于 temp=a; a=b; b=temp;。逗号运算符在这里没有什么特别的作用。
  • 拿 3 杯。将它们标记为 a、b 和 tmp。将橙汁倒入a,番茄酱倒入b。现在尝试交换 a 和 b
  • 您是用 Word 还是其他富文本编辑器编写的?小心那些漩涡状的引号,那些不会编译。如果需要,请使用 IDE 或基本文本编辑器。

标签: c operator-keyword comma


【解决方案1】:

int a = 8, b = 7, temp; 行,您在堆栈内存中分配三个变量(每个4 字节),并将值分配给“a”和“b”变量。 打印值后,temp = a, a = b, b = temp; 行将变量“a”的值分配给变量“temp”,然后将变量“b”的值分配给名为“a”的变量(现在 a = 7 和 temp = 8),然后b = temp 使用临时变量使名为“b”的变量具有名为“a”的变量的原始值。

变量 'a' 和 'b' 的值打印在每个 printf 行中,在这种情况下,用于赋值的逗号分隔符与分号分隔符的操作相同。

关于逗号运算符的详细信息:

  • 首先,对最左边的操作数temp=a 求值并丢弃其结果值。
  • 然后,发生一个序列点,这样temp=a 的所有副作用就完成了。
  • 然后,计算下一个操作数a=b,并丢弃其结果值。
  • 然后,发生一个序列点,这样a=b 的所有副作用就完成了。
  • 最后b=temp 被求值,其结果由完整的表达式返回。

也就是说,在int x = (temp=a,a=b,b=temp); 中,x 将等于b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多