区分:首先明白'[ ]'比'( )'优先与p结合,所以数组指针为 int (*p)[10]形式,用于存放数组的地址;指针数组为 int* p[10]形式 ,用于存放指针;
数组的指针:int (*p) [10] :p指向有10个元素的int类型的数组,数组指针,本质上是指针,指向数组的指针;(int (*p) [10]= &arr; 对数组名取地址代表整个数组的地址,应该将其放到数组指针中)
指针的数组:int* p[10]; 本质上是数组,存放了指针的数组;
数组指针与整型指针类比:
int a = 10; ---------- int arr[10];
int* p = &a;将a的地址放在整型指针中 -------- int(*p) [10] = &arr;将数组地址放在数组指针中;
#include<stdio.h>
int main()
{
int arr[10] = {0};
printf("%p\n", arr);//数组名为数组首元素地址
printf("%p\n", &arr);//整个数组的地址,表示出来=首元素地址
printf("%p\n", arr+1);//+1相当于走一个数组元素
printf("%p\n", &arr+1);//+1相当于走一整个数组
return 0;
}