这是在不使用运算符的情况下执行加法的求和逻辑,+如下所示,
int add(int a, int b) {
const char *c=0;
return &(&c[a])[b];
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我理解如何return声明如何添加a&b.
unw*_*ind 12
请记住,既然a[b]是相同的*(a + b),那么每当索引数组时都会进行隐式添加.这意味着,&a[b]是a + b因为地址和取消引用运营商抵消.
然后,c设置为0,我们可以替换:
&(&c[a])[b] = &(&*(0 + a))[b] = &(a)[b] = &a[b] = &*(a + b) = a + b
Run Code Online (Sandbox Code Playgroud)
我不确定这是否定义明确且可移植,但我认为它适用于大多数"典型"系统.
好吧,它没有你想象的那么复杂,但是你肯定没有什么可以使用的,因为它有点脏;)
c是一个指针,NULL或0与你采取的偏移&0[a],而这正是a,然后你把偏移[b]距离&0[a],这是0+a+b.
这就是魔术.
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |