数组名是一个指针常量,表示数组第一个元素的的起始地址。
如 int a[5]; a表示数组第一个元素a[0]的起始地址&a[0]。
一 引用数组元素的方法:
①用数组下标引用数组元素
数组a中元素用下标表示为:
a[0] a[1] a[2] a[3] a[4]
②用指针引用数组元素
数组a中元素用下标表示为:
int *p = a;
*p, *(p+1), *(p+2), *(p+3), *(p+4)
二 数组和指针的关系:
①既然p是指向数组第一个元素起始地址的指针,可以用*(p+i)表示数组中第i+1个元素,a也是指向数组第一个元素的指针啊,那么能不能用*(a+i)表示第i+1个元素呢?
可以的,可以用printf 打印 *(a+i)的值验证
②反过来,a是指向数组第一个元素起始地址的指针,可以用a加数组下标引用数组元素,如a[3],p也是指向数组第一个元素起始地址的指针,能不能用p加数组下标引用数组元素?
也是可以的,可以用printf 打印 p[0], p[1]....的值验证
PS: 由上得,数组名a和指针p是一样的。实际上编译时,数组元素a[i] 就是当作 *(a+i)去处理的,先通过数组名a找到数组的首地址,然后首地址 a+i 得到元素a[i]的地址,
再然后通过*(a+i)得到第i个元素的内容。
所以:数组的第i个元