1. 普通指针
int *p
2. 数组指针:指向一维数组的指针
int (*p)[4]
当使用二维数组时,
例如int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
int *p = a, 则*(p+11) 为12
int (*p)[4] = a, 则 *(p+1) 指向a[1][0]的首地址, *(*(p+1)+1)表示a[1][1]
当需要二维数组作为参数为数组指针传入函数时
void search(int (*p)[4], int n){}
应该使用search(a, 3)
如果二维数组作为参数为普通指针传入函数时
void average(int *p, int n){}
应该使用average(*a, 3)
3. 指针数组:一个数组,其元素均为指针,通常用在字符数组
char *p [4]
4. 指向函数的指针, 用在将函数作为参数传递的时候,参考qsort
int (*p) (int, int)
5. 返回指针的函数
int *p (int, int)
[记住:则p与[]或者()结合的优先级高于*, 所以如果*, p不用括号包含,则4 -> 5, 2 -> 3]
6. 指向指针数据的指针
int **p