c - 理解求和逻辑

标签 c

这是 summation不使用 + 运算符执行加法的逻辑,如下所示,

int add(int a, int b) {
   const char *c=0;
   return &(&c[a])[b];
}

任何人都可以让我理解 return 语句如何归结为添加 ab

最佳答案

请记住,由于 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/

相关文章:

c - 欺骗 libdc1394

c - recv() 总是返回 1

c - 字符串数组。编译器错误。也许内存越界?

c - 信号总是结束程序

c - 主循环中的父进程无法访问子进程修改的全局值

c - __isoc99_scanf 和 scanf

c - strcmp 不给 0,但两个参数相同

c - 两个寄存器的位声明

c - 位掩码 - 左移溢出

C 语言中关于字符串的困惑