数组与指针
有这样一种说法:“在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\n", 4[array]);
}
posted on 2019-10-11 16:28 freshair_cn 阅读(118) 评论(0) 编辑 收藏 举报