对C语言数组名的思考

定义一个数组:

int a[5] = {1,2,3,4,5};

访问元素5可以通过以下形式的代码:

a[4]; /*下标运算符,可理解为数组的访问形式*/
*(a+4); /*指针的加法运算和解引用,可理解为指针的引用形式*/

实际上这两种访问形式是等价的,即X[m]=*(X+m)
这里不妨再拓展一下,根据加法交换律,交换两个加数的位置不会影响结果,那么*(X+m) = *(m+X) = m[X]是否成立呢?

#include <stdio.h>
int main()
{
    int a[5] = {1,2,3,4,5};
    printf("a[4] = %d\n", 4[a]);
    return;
}

答案是肯定的,编译没有任何error和warning,结果正常输出

a[4] = 5

posted on 2023-11-30 10:39  OrangeGLC  阅读(9)  评论(0)    收藏  举报

导航