簡體   English   中英

為什么分配時X的值不增加

[英]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寫12
  • 然后x遞增到值13
  • 然后x被賦值給printf值 2

然后執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM