指针乘以变量值,var = (var + 1)&3

问题描述 投票:-1回答:1

我所说的代码发生在 此处. 我不知道这是合法的C,不会导致segfault.它是什么意思它相当于 var = &var[3]?

c pointers
1个回答
2
投票

不对。这个表达式 pos = (pos+1)&3; 相当于

pos = pos + 1;
pos = pos & 3;

除了它并不意味着将中间值存储到 pos 变量。

编辑 回复评论中的补充问题

位元 AND 运算符在 3 的值处截断,或者说是包装,增量过程。

pos = pos + 1;
pos = pos % 4;

在这里指的是。

pos = pos + 1;
if( pos > 3 )
    pos = 0;

然而,算术 模数 modulo(谢谢,@chux--重启莫妮卡)或者位智AND表达式用更少的操作做出同样的结果,最重要的是没有条件分支,这样会降低效率。

比较一下问题 为什么处理一个排序数组比处理一个未排序数组快?本回答 到它。

© www.soinside.com 2019 - 2024. All rights reserved.