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
,不知道是否有关系?
j[a]是*(j+a)的简写形式,虽然结果没错,但含义却是错的,所以不要这么写
你读指针,怎么读都都不会报错,你赋个值试试?
楼上正解,还有lz的printf("%\n");中的%多余了吧
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
?想到什么?