c - 对于数组,为什么 a[5] == 5[a]?

标签 c arrays pointers pointer-arithmetic

正如 Joel 在 Stack Overflow podcast #34 中指出的那样, 在 C Programming Language (又名:K & R),在 C 中提到了数组的这个属性:a[5] == 5[a]

Joel 说这是因为指针运算,但我还是不明白。 为什么 a[5] == 5[a]

最佳答案

C标准定义[]运算符如下:

a[b] == *(a + b)

因此 a[5] 的计算结果为:

*(a + 5)

5[a] 将评估为:

*(5 + a)

a 是指向数组第一个元素的指针。 a[5] 是距离a 5 个元素 的值,与*(a + 5),从小学数学我们知道它们是相等的(加法是 commutative )。

关于c - 对于数组,为什么 a[5] == 5[a]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743469/

相关文章:

c - 指向返回多维数组的函数的函数指针

c - 在 C 语言中使用 If else 处理 Char

c - ffmpeg转码

c - gcc 警告传递 'alt_16550_fifo_write' 的参数 2 使指针来自整数而不进行强制转换

c - 内存大小加载和存储惩罚分析?

c - Socket编程-C-选择连接

javascript - 对 boolean 函数数组运行reduce。它总是返回 true,并且如果返回 false,则无法找到一种方法来突破 reduce 方法

javascript - 为什么我们应该递减 i 变量并在函数中使用 break?

c++ - 如何在具有常量类变量的类中声明常量数组?

c - 编写一个通用函数来检测指针数组是否包含 NULL