1. Definitions
-
int ** p; Pointer Pointer
-
int (* p2) [5]; array pointer to an array
-
int * array [5]; pointer array, an array of type int *
-
int array2 [3] [5]; two-dimensional array, an array of arrays
2. Description
1) as a parameter, converted to a two-dimensional array is an array of pointers, int a [] [5] == int (* a) [5]
2) as a parameter, it is converted to an array of pointers pointer to a pointer, int * p [5] == int ** p
3) an array of pointers may be assigned to the pointer variable pointer variable, p = array;
4) two-dimensional array can be assigned to a variable array pointer variable, p2 = array2;
5) an array of pointers to the pointer array (two-dimensional array) are not interchangeable, are not equal in the parameter can not be assigned.
3. Code:
#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]));
}
Compile:
No error, no warning
Note: The following p = array2; produce warning, can not be directly assigned to the two-dimensional array of pointers a pointer variable.
int **p;
int array2[3][5];
int *p2;
int i;
p = array2;
p2 = array2[0];
i = array2[0][1];