e.J*_*mes 7 c increment operators dereference
我刚写了以下代码行:
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
Run Code Online (Sandbox Code Playgroud)
我的目的是在进行比较之前增加count数据结构中data_ptr指向的变量threshold,并且这行代码有效.
如果我data_ptr在进行比较之前想要增加,我会写这个:
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
Run Code Online (Sandbox Code Playgroud)
出于好奇,我也尝试了这行代码:
if (++data_ptr->count > threshold) { /*...*/ } // example 3
Run Code Online (Sandbox Code Playgroud)
并发现它的行为与第一个完全相同.
第一个问题: 为什么示例#3与示例#1的作用相同?这是运营商优先考虑的问题吗?标准中的东西?我不得不写一个快速的测试程序,因为答案对我来说并不明显.
第二个问题:我应该以if不同的方式撰写此声明 我可以先在自己的行上执行增量,然后测试条件以避免任何可能的混淆.这是必要的,或者前两个例子是否足够明显?
是的,这是运营商优先权的问题.箭头运算符的优先级高于增量运算符.
为了回答你的第二个问题,我通常将这种类型的结构分成两个单独的语句:
++(data_ptr->count);
if(data_ptr->count > threshold) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
这强调了正在发生的事情并消除了可能的混淆.但是,这可能是一个偏好问题.
例如:
if (...1...)
...2...
else if (++data_ptr->count > threshold)
...3...
else
...4...
Run Code Online (Sandbox Code Playgroud)
与:
if (...1...)
...2...
else
{
++data_ptr->count;
if (data_ptr->count > threshold)
...3...
else
...4...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2302 次 |
| 最近记录: |