前面我们知道,数组元素在数组中的排列顺序和存储地址可以通过数组下标来确定。 由于每个数组元素都相当于一个变量,指针变量可以指向数组中的元素,也就是说可以通过指针的方式访问数组中的元素。
指向数组元素的指针变量的定义和赋值方法与指针变量相同,例如:
int a[10]; int *p; p=&a[0];
C语言规定数组名代表数组首地址,即第0个元素的地址。 所以:
p=a; int *p=a;
对于指向首地址的指针p,p+i(或a+i)为数组元素a[i]的地址,*(p+i)(或*(a+i))为值一个[我]。
如果指针变量 p 已经指向数组中的一个元素,则 p+1 指向同一数组中的下一个元素。
引入指针变量后,可以使用以下两种方法访问数组元素:
(1)下标法,即访问a[i]形式的数组元素,上面介绍数组的时候就用到了这个方法。
(2)指针法,即用*(a+i)或*(p+i)的形式间接访问数组元素,其中a为数组名,p为指向的指针变量数组,其初始值 p=a。
#includeint main() { int i; int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; for(i=0;i<10;i++) { printf("P Value:%d a Value :%d\n",*(p++),*(a+i)); } printf("\n"); return 0; }
注意这两种输出方式,可以通过++或--移动指针并修改自身的值,但是不能改变数组名本身的值。
请自行运行并分析。