c指针怪异的表达式

时间:2013-04-18 05:39:01

标签: c pointers char expression

我想知道为什么这段代码正在运行。

代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
        char* c = "1234567";
        printf("%c\n", 5[c]);

        return 0;
}

结果:

6

2 个答案:

答案 0 :(得分:4)

如果您对a[b]语法感到困惑,那么只需刷新您的C知识。

a[b]定义为*(a + b),由于a+bb+a相同,因此a[b]b[a]

答案 1 :(得分:0)

在C中,数组索引的工作原理如下,例如a [i]它实际上由编译器解释为*(a + i),因此它可以写成*(i + a),因为加法是可交换的。 因此a [i] == i [a]。