[英]Why the value of X is not incremented while assignment
我是C语言的新手,我不太确定为什么在第4行上完成后增量后x
的值不会改变,我的意思是
x = printf("%d",x++);
x
的值为12
因此printf将打印12
,然后应将x
分配为2
,而在++
,应稍后用2+1
更改x
,并在第6行进行预增量,因此输出不应为124
。
为什么没有在第4行添加x?
请帮忙。
#include <stdio.h>
int main(){
int x = 12;
x = printf("%d", x++);
printf("%d", ++x);
return 0;
}
使自己意识到序列点 。 从这个 [强调我的] :
在所有函数自变量和函数指示符的求值之后,以及实际函数调用之前,有一个顺序点。
从这个 [强调我的] :
增量运算符会引发将适当类型的值1添加到操作数的副作用。 减量运算符会产生从操作数中减去适当类型的值1的副作用。 与其他副作用一样,这些操作将在下一个序列点或之前完成 。
查看以下语句:
x = printf("%d", x++);
后递增运算符将操作数的值加1
但是表达式的值是该操作数在增量运算之前的原始值 。
因此,传递给printf()
的x
的值将是其原始值12
并且由于序列点,在调用printf()
之前, x
的值将增加1
。 printf()
的返回值将分配给x
,它将覆盖x
的最后一个值, x
的最后一个值是由于post ++
运算符而增加的值。 因此,在此语句之后, x
值为2
。
x的值为12,因此printf将打印12,然后应将x分配为2,而在++处,应稍后用2 + 1更改x,并在第6行进行预增量,因此输出不应为124 。
不,分配是在所有涉及printf("%d", ++x);
,您的代码等效于:
#include <stdio.h>
int main(){
int x = 12;
int y = printf("%d", x++);
x = y;
printf("%d", ++x);
return 0;
}
所以x = printf("%d", ++x);
会:
然后执行printf("%d", ++x);
而x的值在2之前,因此x在参数中给定之前先增加,所以3被写入
最终的打印结果是123
PS。 正如@HS在另一句话中所说:在所有函数参数的求值之后(x ++是printf()的参数),存在一个序列点,并且在下一个序列点或之前完成前/后递增/递减操作。
这将为您工作:
++ x是前缀增量, x ++是后缀增量,这是两者的区别:
变量增加后,前缀增量返回变量的值。
另一方面,更常用的后缀增量在变量增加之前返回变量的值。
#include <stdio.h>
int main()
{
int x = 12;
x = printf("%d", ++x);
printf("%d", ++x);
return 0;
}
x = printf(“%d”,x ++); 这大约是该整数的大小。 x ++在printf中,它正在打印x的值并将该值增加一。 但这不会影响该整数的大小。 然后,将x的大小分配给x而不是值。 这就是为什么增量文件在那里不起作用的原因。
我想你能理解我的意思。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.