簡體   English   中英

Postfix對指針的一元增量操作

[英]Postfix unary increment operation on pointers

我剛開始使用CPointers 關於指針的一元增量操作,有一個使我感到困惑的概念。

int num1, *pnum1
num1 = 2;
pnum1 = &num1;
printf("%d \n before: " , *pnum1);
num1 = (*pnum1)++;
printf("%d \n after: " , *pnum1);
return 0;

由於一元增量運算符 (++)的優先級高於取消引用運算符 (*),因此我將* pnum1放在花括號中。 我期望看到以下結果:

之后:3

但是它不會增加num1的值。 為什么會這樣呢? 是不是應該增加num1的值?

這是未定義的行為。 您要遞增num1 (通過(*pnum1)++ ),然后將結果分配回num1 在這種情況下,遞增和賦值發生的順序是不確定的,因此它可以獲取舊值num1 ,增量num1 ,然后將舊值分配回num1 ,這似乎是編譯器選擇執行的操作。

如果改用num1 = num1++ ,則編譯器可能會警告您。

解決方案是不要做這樣的事情,因為這是不確定的行為。

查找“序列點”以獲取更多信息。

暫無
暫無

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

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