[英]proper usage of the pre-increment operator in combination with the pointer dereference operator
我剛寫了以下代碼行:
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
我的目的是在比較threshold
之前增加data_ptr
指向的數據結構中的count
變量,並且這行代碼有效。
如果我在進行比較之前想要增加data_ptr
,我會寫這個:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
出於好奇,我也嘗試了這行代碼:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
並發現它的行為與第一個完全相同。
第一個問題: 為什么示例#3與示例#1的作用相同? 這是運營商優先考慮的問題嗎? 標准中的東西? 我不得不寫一個快速的測試程序,因為答案對我來說並不明顯。
第二個問題:我應該用不同的方式寫這個if
語句嗎 我可以先在自己的行上執行增量, 然后測試條件以避免任何可能的混淆。 這是必要的,或者前兩個例子是否足夠明顯?
1)優先權
2)偏好
是的,這是運營商優先權的問題。 箭頭運算符的優先級高於增量運算符。
為了回答你的第二個問題,我通常將這種類型的結構分成兩個單獨的語句:
++(data_ptr->count);
if(data_ptr->count > threshold) { /*...*/ }
這強調了正在發生的事情並消除了可能的混淆。 但是,這可能是一個偏好問題。
例如:
if (...1...)
...2...
else if (++data_ptr->count > threshold)
...3...
else
...4...
與:
if (...1...)
...2...
else
{
++data_ptr->count;
if (data_ptr->count > threshold)
...3...
else
...4...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.