[英]Postfix unary increment operation on pointers
我剛開始使用C和Pointers 。 關於指針的一元增量操作,有一個使我感到困惑的概念。
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.