c - 为什么对于任何 C 数组,此表达式都包含 a[7] == 7[a]

标签 c arrays

<分区>

Possible Duplicate:
In C arrays why is this true? a[5] == 5[a]

谁能解释为什么对于任何数组表达式 c a[7] == 7[a] 都是真的。

有没有可能是假的

我在 wiki 上看到 x[i] 是 *(x+i) 的语法糖,它等于 *(i+x),这是 i[x],但我无法正确理解它.

最佳答案

  • a[7] 等价于*(a + 7)
  • 同样 7[a] 等同于 *(7 + a)

这给出了相同的结果,因为向指针添加一个整数是 commutative操作。


is there any case that it can be false

简短的回答是否定的。对于简单的指针运算,它将始终为真。

长话短说,要找到反例,您必须使用 hack。一种方法是使用宏:

#include <stdio.h>

#define a 1+s

int main(void) {
    char s[] = "1q2w3e4r5t6y";
    int x = a[7];
    int y = 7[a];
    printf("%c %c\n", x, y);
    return 0;
}

结果:

s 5

结果是不同的,因为宏展开后表达式变得不同:1+(s[7])7[1+s]

在线查看:ideone

关于c - 为什么对于任何 C 数组,此表达式都包含 a[7] == 7[a],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947862/

相关文章:

c - 如何从 Serial.read() 中检索字符串值;

java - 将 Integer[] 转换为 int[] 的最佳方法是什么

c - 如何将 0xFF 存储到 C 中的字符?

python - 如何在Python中获取C数组

c - 在 CPU 调度模拟 C 程序(SJF)中,当节点放在 "queue"上时,如何按链表中的 CPU 时间对节点进行排序?

php - 将字符串拆分为日期数组

javascript - 尝试将数字增加给定值

arrays - 在C++中是否允许使用具有定义的const的数组?

c - 使用 2 个 FIFO 的客户端-服务器 ipc 消息中的 kill() 函数问题

c++ - 在iOS上执行pthread_cancel时,堆中的内存会被释放吗?