数组与指针

有这样一种说法:“在C中,如果数组名后不加[],只单独写数组名,那么该名称表示指向数组初始元素的指针”。

这种说法的信息量是负的。

在语法上,数组和[]是没有关系的。

事实上,在最开始的时候,p[i]只是*(p + i)的简便写法;下标运算符[]原本只有这种用法,它和数组是没有关系的。

也就是说,数组声明中的[]和数组元素表达式中的[]意义是完全不同的。

事实上,由于a + b与b + a的意义没有改变,因此我们可以把*(p + i)写成*(i + p);同时由于p[i]是*(p + i)的简便写法,由此类推实际上它可以写成i[p]。

我们使用数组元素时通常会写成array[4]的样子,但实际上如果我们写成4[array]也是正确的。

虽然很另类,但是下面的例子是可以正确运行的:

#include <stdio.h>

int main(void)
{
    int array[5];
    int i;

    for(i = 0; i < 5; i = i + 1) {
        array[i] = i;
    }

    printf("i[array] is legitimate. 4[array] = %d ", 4[array]);
}

原文地址:https://www.cnblogs.com/freshair_cnblog/p/11655013.html