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];