簡體   English   中英

printf中的前增量和后增量

[英]pre-increment and post-increment in printf

int main()
{
    int value = 4321;
    int *ptrVal = &value;
    printf("%d %d",++value,(*(int*)ptrVal)--);
    return 0;
}

在上面的打印語句中,預增/后增如何工作?

為什么回答4321 4321?

您正在兩個序列點之間兩次修改對象value :您正在調用未定義的行為。 未定義的行為表示您的程序可以打印4321 4321 ,打印42甚至崩潰。

程序的正確版本為:

int value = 4321;
int *ptrVal = &value;

++value;
(*ptrVal)--;  // no need to cast to int *

printf("%d %d", value, *ptrVal);  // same as printf("%d %d", value, value);

當然,您不需要任何臨時指針即可實現此目的。

上面的代碼已損壞。 尚不清楚它如何工作或答案是什么。 您需要在修改或修改與訪問之間的順序點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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