数组指针(array pointer)是一个指针,它指向一个数组的第一个元素。在C语言中,数组名也可以看作是一个指向数组首元素的指针,因此数组名也可以用作数组指针来进行操作。

例如,下面的代码定义了一个包含5个整数的数组,并将数组名p1赋值给一个指向整数的指针变量p2:

int arr[5] = {1, 2, 3, 4, 5};
int *p1 = arr; // 数组名p1也可以看作是一个指向arr数组首元素的指针
int *p2 = &arr[0]; // 取出arr数组首元素的地址,并赋值给指针变量p2

p1和p2都是指向arr数组首元素的指针,它们的值是相等的,可以通过以下方式访问数组的元素:

printf("%d\n", p1[0]); // 输出arr[0]的值,即1
printf("%d\n", p2[2]); // 输出arr[2]的值,即3

数组指针也可以通过指针运算来访问数组的元素。例如,p1+1和p2+1都指向数组的第二个元素,可以通过以下方式访问数组的第二个元素:

printf("%d\n", *(p1+1)); // 输出arr[1]的值,即2
printf("%d\n", *(p2+1)); // 输出arr[1]的值,即2

需要注意的是,指向数组的指针不一定指向整个数组。例如,可以定义一个指向数组的某个子集的指针:

int arr[5] = {1, 2, 3, 4, 5};
int *p = &arr[2]; // 指向arr[2]的指针,也可以看作是指向arr子集的指针
printf("%d\n", p[0]); // 输出arr[2]的值,即3
printf("%d\n", p[1]); // 输出arr[3]的值,即4

因此,数组指针可以看作是指向数组的首元素或子集的指针,它可以用于数组的访问和操作。