数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组.
假设有数组int a[3],变量a为int *类型,内容为a[0]地址,&a默认为&a[0],即a==&a,那么数组指针为什么得用&a,而不能用a赋值?
编译器称a为int *类型,不能转换为int(*)[3]。即在这里,当赋值给数组指针时,将a看成int[3]类型。
其实a与&a只是值相同,类型不同,一个表示a[0]的地址,一个表示整个数组的地址,而数组指针需要的是数组的地址。
同理,函数指针也是。
返回类型 (*指针名)(数据参数表)=函数名;int (*fp)(int a);//*号说明fp是指针。
typedef int (*fp)(int a);//注意,这里不是生成函数指针,而是定义一个函数指针的类型,这个类型是自己定义的,类型名为fp。
其实,正如*能解引用,*指针名为指向的内容,那么int * a;就是指向内容为int的一种类型,储存int的地址。数组指针和函数指针只是储存不同类型的指针罢了。