C high-level programming language: two-dimensional array, pointer to a pointer, array pointer, pointer array

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

 

 

 

Published 170 original articles · won praise 116 · views 330 000 +

Guess you like

Origin blog.csdn.net/u012247418/article/details/102886955