[英]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.