zoukankan      html  css  js  c++  java
  • c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。

    参考代码如下,可以看具体注释辅助理解。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>//输入输出头文件。
    #include <stdlib.h>//本程序需要用到malloc/free函数,引用该头文件。
    int main()
    {
        int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //定义二维数组a,并赋值从1-12.
        int ** p = NULL;//定义二维指针。
        int i, j;
         
        p = (int **)malloc(sizeof(int *) *3);//要访问的数组有三行,所以申请三个一维指针变量。
        for(i = 0; i < 3; i ++)
        {
            p[i] = a[i];//将二维数组行地址赋值到对应的一维指针上。
        }
         
        for(i = 0; i < 3; i ++)
        {
            for(j = 0; j < 4; j ++)
                printf("%d ", p[i][j]); //用指针输出元素。p[i][j]这里也可以写作*(*(p+i) + j)。
            printf(" "); //每行输出后加一个换行
        }
         
        free(p);//释放申请的内存。
         
        return 0;
    }

    用二维指针访问二维数组多用于函数调用。

    对于一维数组,如果函数参数为一维指针可以直接用数组名当做函数参数。但是如果函数参数为二维指针,直接用二维数组名做参数会出现访问出错,是因为二维指针和二维数组的访问方式不同造成的,需要如示例代码中做转换。

    另外一种常用的方法是利用二维数组的内存连续性将二维数组转为一维数组处理,与本题无关,不做更多描述。

    https://zhidao.baidu.com/question/585729445.html

  • 相关阅读:
    PCL:描述三维离散点的ROPS特征(Code)
    veket智能机器人
    三维重建:SLAM的粒度和工程化问题
    DNN:逻辑回归与 SoftMax 回归方法
    人工智能:一种现代方法 第四版 翻译序言
    编程低级错误记录
    apache服务器配置防盗链(centos7)
    Linux下命令行中的复制和粘贴
    rm: cannot remove `libtoolT’: No such file or directory
    switch范围判断
  • 原文地址:https://www.cnblogs.com/xihong2014/p/9386037.html
Copyright © 2011-2022 走看看