谁能详细解释一下这个数字是如何一步一步交换的(逗号运算符)
Can anyone pls explain me in detail how this number got swaped step by step (comma operator)
#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;
}
任何人都可以详细解释一下这个数字是如何逐步交换的(逗号运算符)
在行 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
。
#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;
}
任何人都可以详细解释一下这个数字是如何逐步交换的(逗号运算符)
在行 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
。