指针和数组
数组名是数组首元素的地址
int arr[10] = {1,2,3,4,5,6,7,8,9,10}
int *P = arr;
printf("%d\n",arr[2]); //3 在编译器内处理时会变成*(arr+2)
printf("%d\n",p[2]); //3 可转为 *(p+2)
printf("%d\n",2[arr]); //3
[ ] 是一个操作符,2和arr是两个操作数,既然加法有交换律,同理,2和arr交换也是可以的
arr[2] < == > * (arr+2) < == > * (p+2) < == > * (2+p) < == > *(2+arr) == 2[arr]
二维数组与指针的关系:
a 二维数组名,指向a[0]
a[0], *(a+0), *a 0行0列元素地址
a+1, &a[1] 1行首地址
a[1], *(a+1) a[1] [0]的地址
a[1]+2, *(a+1)+2, &a[1] [2] a[1] [2]的地址
*(a[1]+2), *(*(a+1)+2), a[1] [2] a[1] [2]的值