我刚刚写了以下代码行:
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
我的意图是在与 进行比较之前增加指向count
的数据结构中的变量,并且这行代码有效。data_ptr
threshold
如果我想data_ptr
在进行比较之前增加,我会这样写:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
出于好奇,我也尝试了这行代码:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
并发现它的行为与第一个完全相同。
第一个问题: 为什么示例 #3 与示例 #1 的工作方式相同?这是操作员优先级的问题吗?标准中的东西?我不得不编写一个快速测试程序,因为答案对我来说并不明显。
第二个问题:我应该以if
不同的方式写这个陈述吗?我可以先在自己的行上执行增量,然后测试条件以避免任何可能的混淆。这是必要的,还是前两个例子本身就足够明显?