有关数组[]的问题

c#include <stdio.h>

int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};

    for (int i = 0; i < 10; ++i)
    {
        printf("%d ",a[i]);
    }
    printf("%\n");
    for (int j = 0; j < 10; ++j)
    {
        printf("%d ",j[a]);
    }
    return 0;
}

第二个 for 循环中 j[a] 这么写居然是对的,原理是什么?
想到了delete [] ptr,不知道是否有关系?

阅读 3.4k
4 个回答

a是指针,是一块内存的地址值,j[a]=*(j+a)=*(a+j)=a[j] 中,关于a[j]==j[a]?在StackOverFlow 有一帖: With C arrays, why is it the case that a[5] == 5[a] ?

指针是危险的,诚如楼上所言,编译器经常不会报错,非法访问内存,或者读到的值和目标值不同,对于程序来说就是错的,但语法角度上又是正确的,我没有工程经验,感觉大多数指针的错误是逻辑错误/手抽打错。

---

楼主为什么会想到delete [] ptr?想到什么?

j[a]是*(j+a)的简写形式,虽然结果没错,但含义却是错的,所以不要这么写

新手上路,请多包涵

楼上正解,还有lz的printf("%\n");中的%多余了吧

你读指针,怎么读都都不会报错,你赋个值试试?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进