1.
数组指针:int (*p)[10] 为p指针,指向一维数组;也叫行指针,指向整个数组;元素表示:(*b)[i];指向二维数组:p=&c;
指针数组:int *p[10] 为一个数组,数组元素为指针,元素表示:*p[i];指向二维数组:
两者都可以用来表示二维数组
2.
函数指针:int (*p)() p为指针,指向一个返回值为int型变量的函数
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
指针函数:int *p() p为函数,返回值为指针
3.
常量指针:const int *p;
指针常量:int *const p; 指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
eg:int i = 3;
int j = 5;
const int * p1= &i;
int *const p2=&j;
则:
p1 = &j; /* 正确,p可以被重新赋值 */
*p1 = j; /* 错误,因为他改变的是p所指向的变量的值。*/
p2=&i;/* 错误,因为指向的地址不可以重新赋值,即不能改变p2的值。*/
*p2=4; /* 正确,p2指向的内容可以改变 */
常量指针表示一个指针指向的变量为常量及带有const属性(e.x. const int *p) , 而指针常量表示一个指针本身为常量及指针本身带有const属性(e.x. int *const p), 常量指针指向的对象由于有const属性, 无法直接改变, 但是指针本身值(及指针指向的内存地址)可以改变, 而指针常量则是指针本身有const属性, 指针的值(及指针指向的内存地址)无法直接改变, 而该地址内的变量可以改变。
本质都是指针。