1. 定义
int **p; 指针的指针
int (*p2)[5]; 数组指针,指向一个数组
int *array[5]; 指针数组,是一个int *类型数组
int array2[3][5]; 二维数组,数组的数组
2. 说明
1)作为形参时,二维数组会被转换为数组指针,int a[][5] ==int (*a)[5]
2)作为形参时,指针数组会被转换为指针的指针,int *p[5] ==int **p
3)指针数组变量可以赋值给指针的指针变量,p = array;
4)二维数组变量可以赋值给数组指针变量,p2 = array2;
5)指针的指针与数组的数组(二维数组)不可互换,在形参中不相等,也不能进行赋值。
3. 代码:
#include <stdio.h>int fun1(int **p) // = int *p[5]{return 0;}int fun2(int a[][5]) // = int (*a)[5]{return 0;}int main(){ int **p;int (*p2)[5];int *array[5];int array2[3][5];p = array;p = &(array[1]);p2 = &(array2[1]);p2 = array2;fun1(p);fun1(array);fun1(&(array[0]));fun2(p2);fun2(array2);fun2(&(array2[0]));}
编译:
无error,无warning
注:以下p = array2; 会产生warning,二维数组不能直接赋值给指针的指针变量。
int **p;int array2[3][5];int *p2;int i;p = array2;p2 = array2[0];i = array2[0][1];