数组指针---指向数组的指针
指向一维整型数组的指针
int a [10]={1,2,3,4,5,6,7,8,9,10};
int *p=a //这里啊退化为首元素的地址a《=》&a[0],所以int*p=&a[0]和前面等价
p本身存储的是a[0]的地址,对其进行*运算可以得到a[0]
printf(“%d”,*p)在屏幕上打印数字1
由于数组在内存空间上连续,数据类型一致
所以*(p+i)可以访问到a[i]元素
指向二维整型数组的指针
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
此时数组a[3][4]的数据类型本质是int[4],所以int[4]作为指向这个数组指针的基类型
按照c语言规则定义有指针:
int (*p) [4] = &a[0]
可推测p+i就是a[i]的地址
可得*(p+i)就是a[i][0]的地址
可得*(p+i)+j就是a[i][j]的地址
可得*(*(p+i)+j)就是a[i][j]
可以得到一个小结论,二维整型数组的指针需要经过两次*运算才可以得到具体的值而非地址
但是在二维字符型数组,只需要*(p+i)字符串首元素的地址一般就够用了,一般用不上具体的值