【发布时间】:2010-12-27 10:38:35
【问题描述】:
我刚刚写了下面这行代码:
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 语句吗?我可以先在自己的行上执行增量,然后然后测试条件以避免任何可能的混淆。这是必要的吗,还是前两个例子本身就足够明显?
【问题讨论】:
标签: c operators increment dereference