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

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

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("\n"); //每行输出后加一个换行
    }
     
    free(p);//释放申请的内存。
     
    return 0;
}

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

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

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

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

转载于:https://www.cnblogs.com/xihong2014/p/9386037.html

c语言中如何通过二级指针来操作二维数组相关推荐

  1. 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...

    例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...

  2. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  3. 【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

    文章目录 一.抽象 二维数组 业务函数 1.二维数组 打印函数 2.二维数组 排序函数 二.完整代码示例 一.抽象 二维数组 业务函数 1.二维数组 打印函数 注意 , 二维数组 作为 函数参数 输入 ...

  4. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

    文章目录 一.二维数组 1.二维数组声明及初始化 2.二维数组遍历 3.二维数组排序 二.完整代码示例 一.二维数组 前几篇博客中 , 介绍的是指针数组 ; 指针数组 的 结构特征 是 , 数组中的每 ...

  5. 指针数组下标JAVA_Java语言中可用下标和指针两种方式表示数组元素。

    [判断题]一行可以写多条预处理命令 [判断题]如果一个java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名一致. [判断题]Protected类型的实例变量只能在本类中使用,其他类中不可 ...

  6. Nwafu-OJ-1430 Problem a C语言实习题五——5.用指针实现查找二维数组中最大数及其位置

    题目描述 用指针实现:找出二维数组(设3行4列)中的最大数及其位置. 输入 二维数组(设3行4列). 输出 最大数及其位置. 样例输入 1 2 5 4 6 8 7 2 0 2 4 5 样例输出 1 1 ...

  7. 【C语言进阶深度学习记录】三十 二维数组与二维指针

    文章目录 1 二维指针(指向指针的指针) 2 二维数组 3 二维数组的类型 3.2 如何动态申请二维数组 4 总结 1 二维指针(指向指针的指针) 指针的本质是变量 指针的指针是保存指针变量的地址.如 ...

  8. C语言学习之有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值

    有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. int main(){int a[3][4];int i,j,*p;//p是 int *型指针变量printf("请 ...

  9. 二维数组和指针(包含交换二维数组行列)

    有必要对a[i]的性质作进一步说明.a[i]从形式上看是a数组中的第i个元素.如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容.a[i]是有物理地址的,是占内存单元的.但如果a是 ...

  10. 用指针来表示二维数组的方法

    1.类型说明 int *b;  //定义一个int型指针变量 int *p[3];   //定义一个int型指针数组的变量 int (*c)[3]  和  int (*)[3]:   //定义一个指向 ...

最新文章

  1. exchange2007 灾难恢复E00.log(虚拟环境实验)
  2. python如何取消缩进_python如何处理缩进
  3. Servlet基础之HttpServletResponse详解
  4. linux 日志服务器简单用
  5. 创建基于AJAX技术的Scribble应用程序
  6. 无限复活服务器,绝地求生无限复活模式怎么玩 无限复活新手教程
  7. 作为一名程序员,我一直为中国的软件产业感到苦恼。
  8. MONO Jexus部署最佳体验
  9. Qt4_与主线程通信
  10. Virtual Box创建共享目录
  11. VS2010 IDE安装问题
  12. AIS 2021顶级论文报告会论文征集与听众报名通知
  13. java double 存储_Java语言中:float、double在内存中存储方式
  14. 匆忙赶路的时候别忘了适时停下来回头看看
  15. linux ubuntu 版本,ubuntu各版本的区别
  16. C语言——求n天后的日期
  17. 基于Maple的超静定连续梁内力求解器的实现
  18. Style Transfer for Anime Sketches with Enhanced Residual U-net and Auxiliary Classifier GAN
  19. PAT乙级 1012 数字分类 (20 分)
  20. 安卓带步骤的手写签名(附源码)

热门文章

  1. ElasticSearch学习(2)-Java接口操作ElasticSearch
  2. “移”网打尽:网络即服务
  3. OpenCV探索之路(十四):绘制点、直线、几何图形
  4. [软件架构]基于PluginRT的插件编程
  5. thrift 学习 了解
  6. 离职因多写3个字被索赔2.9万,这家公司的操作让网友直呼拳头摁了......
  7. 2022互联网大厂新年礼盒:腾讯向善、阿里家书、百度箱包抢镜!
  8. 搞了 2 周性能优化,QPS 终于翻倍了!
  9. 1024程序员节,别人家的公司真香!羡慕ing~
  10. 终于搞懂了Java 8 的内存结构,再也不纠结方法区和常量池了!!