这是 summation不使用 +
运算符执行加法的逻辑,如下所示,
int add(int a, int b) {
const char *c=0;
return &(&c[a])[b];
}
任何人都可以让我理解 return
语句如何归结为添加 a
和 b
。
最佳答案
请记住,由于 a[b]
与 *(a + b)
相同,因此每当您索引数组时都会执行隐式添加。这意味着 &a[b]
是 a + b
,因为寻址和取消引用运算符抵消了。
然后,将 c
设置为 0
,我们可以替换为:
&(&c[a])[b] = &(&*(0 + a))[b] = &(a)[b] = &a[b] = &*(a + b) = a + b
我不确定这是否定义明确且可移植,但我想它可以在大多数“典型”系统上运行。
关于c - 理解求和逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854307/