前言

  最近用C语言写LeetCode 有的题目给的函数把二维数组用二级指针传进来 并传入行数和列数 引起一些疑惑

本来以为C语言学得海星,查了一些资料后,觉得自己还是个弟弟 : (


按一维数组的思路处理二维数组,将二维数组名作为二级指针传入

出现异常(图示运行在DEVC++中)

二维数组名+1相当于在行上+1
然而传入的二级指针

按二维指针指针传入的num失去了二维数组的性质,相当于仅进行了数组首地址的传递,和普通指针没有区别


仅进行了地址值的传递,甚至可凭借数组的连续性按一维数组的方式来访问元素



那怎么传递二维数组呢?

如果行列数已知,可以用如下方法

这里列下标是必填的,因为只有确定了列下标,程序才知道计算num[i]这种地址时该以多少个元素作为一行,由num+1的结果也可以看出num已经是正常的二维数组名了

也可以用int (*num)[3],效果与int num[ ][3]等价
int (*num)[3] 说明num是一个指向有三个int元素数组的指针,所以步长也为3 × sizeof(int),同用一维数组访问的方式类似



那如何以指针形式进行访问呢?
除了上面以一维数组的方式进行访问外,还可以将二维数组还原回来

void test(int **num, int row, int col) {int **p = (int **)malloc(sizeof(int *)*row);或者int *p[2];//int *p[row];for(int i = 0;i<row;i++){p[i] = num+i*col;}printf("num[1][1] = %d\n", p[1][1]);//输出为4free(p);
}int main() {int num[2][3]= {{0,1,2},{3,4,5}};test(num,2,3);return 0;
}


2019/04/09

会再更新指针的博客的

指针:C语言二级指针与二维数组相关推荐

  1. c语言函数输出数组,如何让C语言函数返回一个二维数组

    为了让C语言函数返回一个二维数组,有些人这样定义函数: int **foo(int rows, int columns) 然后在函数中费劲心机拼出来一个这样的malloc语句: int (*resul ...

  2. C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中

    C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中 #include <stdio.h> int main(){int a[2][3]={{1,2,3},{4,5,6}}; // ...

  3. c语言中二维数组怎么,c语言中什么是二维数组

    c语言中什么是二维数组 二维数组A[m][n],这是一个m行,n列的二维数组.以下是由应届毕业生小编整理关于c语言二维数组的内容,希望对大家有所帮助!更多相关内容请关注应届毕业生考试 网. c语言的二 ...

  4. C语言错误c2063,请教C语言中关于将二维数组复制到一个三维数组的问题

    请教C语言中关于将二维数组复制到一个三维数组的问题 小白正在填写一段代码,是有点类似与俄罗斯方块的一段游戏代码,代码如下 要求在增加参数,变量和函数的情况下完成此代码,只能填写// write app ...

  5. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

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

    1. 定义 int **p;  指针的指针 int (*p2)[5];  数组指针,指向一个数组 int *array[5];  指针数组,是一个int *类型数组 int array2[3][5]; ...

  7. 计算机二级指针,C语言——二级指针

    二级指针的概念 首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址, 一级指针所关 ...

  8. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  9. c语言中定义字母二维数组,C语言中二维字符数组

    C语言中二维字符数组的定义和初始化 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: Code: 1.char testcase[30][MAX_LENG ...

  10. C语言学习笔记 (005) - 二维数组作为函数参数传递剖析

    前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...}// ...

最新文章

  1. 服务器dbback文件夹,怎么让SQL 2000定时复制备份数据库到局域网中的指定电脑上? - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  2. asp.net ajax中文乱码的解决?2010-01-19 12:06
  3. wxpython菜单的位置_wxpython教程:[5]次级菜单
  4. 点到点链路上的 OSPF
  5. 2021时间序列-对比学习必读的四篇论文
  6. 消息中间件-ActivityMQ系列文章-入门及例子
  7. 遗传算法拟合函数(原理及Python实现)
  8. 《乐高EV3机器人搭建与编程》——2.1 零件储存箱
  9. java 微信小程序 在线学习系统app
  10. 联想微型计算机怎么连接电源,终于认识联想电脑主板与机箱电源安装方法
  11. 互联网公司裁员还有秘密?我知道了!
  12. 计算机群星闪耀时-记计算机界的大牛们
  13. 单片机 AD/DA数模转换
  14. jQuery 库学习
  15. oh my zsh详细安装教程
  16. 收藏夹导出至html,分享win7电脑中三种导出浏览器收藏夹地址方法
  17. 数据结构期末考试——选择题
  18. 环境变量LC相关设置
  19. Xcode配置开发分组development team
  20. 现代软件工程作业4-7(龙秋娴)

热门文章

  1. 萝卜怎么吃最治病:白菜萝卜汤养胃暖身
  2. 携程React Native实践
  3. 科学计算自由软件SCILAB
  4. 路由器R473g虚拟服务器设置,TL-R473G上网方式配置详解 路由器
  5. 我的大学 --- 郭天祥【4】
  6. 5.Wide Deep Learning for Recommender Systems论文详细解读和代码实现
  7. 中世纪开始在英语里也用作Affrike指非洲
  8. 网络安全课程笔记(1)
  9. linux服务器崩,linux – 我的服务器崩溃了.这是日志.什么可能发生?
  10. ES6语法笔记(ES6~ES11)