C语言高级编程:二维数组、指针的指针、数组指针、指针数组

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];
发布了170 篇原创文章 · 获赞 116 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/u012247418/article/details/102886955