1, 形参为二维数组, 并给定第二维长度

此方法是最简单最直观的方法,形参与实参一样,容易理解。

int arr[][3]

以杨氏矩阵查找问题为例

int findNumInYangTableau(int arr[][3], int rows, int cols, int num)
{if(arr != NULL && rows > 0 && cols > 0){int row = 0;int col = cols - 1;while(row < rows && col > 0){if(num == arr[row][col]){printf("num = (%d, %d)\n", row, col);return 1;}if(num > arr[row][col]){++row;}else{--col;}}}return 0;
}int main()
{int arr[3][3] = {{1, 2, 3},{2, 3, 4},{3, 4, 5},};int ret = findNumInYangTableau(arr, 3, 3, 4);printf("ret expected 1, actual %d\n", ret);return 0;
}

2, 形参为指向数组的指针, 并给出数组长度

int (*arr)[3]
int findNumInYangTableau(int (*arr)[3], int rows, int cols, int num)
{if(arr != NULL && rows > 0 && cols > 0){int row = 0;int col = cols - 1;while(row < rows && col > 0){if(num == arr[row][col]){printf("num = (%d, %d)\n", row, col);return 1;}if(num > arr[row][col]){++row;}else{--col;}}}return 0;
}

3, 形参为指针的指针

此方法实参必须为指针,而不能为数组名

int findNumInYangTableau(int** arr, int rows, int cols, int num)
{...
}int main()
{int array[][3] = {{1, 2, 3},{2, 3, 4},{3, 4, 5},};int* a[3];a[0] = array[0];a[1] = array[1];a[2] = array[2];int ret = findNumInYangTableau(a, 3, 3, 4);//这里传(array, 3, 3, 4)会报错}

还有一种表示

void subfun(int n, char **subargs)
{  int i;   for (i = 0; i < n; i++) {  printf("subargs[%d] = %s\n", i, subargs[i]);  }
}  char* arg[] = {"abc","cde","efg",};
//这种写法和上面的等价
char* b[3];
b[0] = arg[0];
b[1] = arg[1];
b[2] = arg[2];subfun(3, arg);
subfun(3, b);

但是如果是 int 数组就不适用了

编译会报警告, 运行后会段错误
但是int 数组这样写可以

int array[][3] = {{1, 2, 3},{2, 3, 4},{3, 4, 5},};int* a[3];a[0] = array[0];
a[1] = array[1];
a[2] = array[2];

方法四:形参为指针+数组的行+数组的列

int findNumInYangTableau(int* arr, int rows, int cols, int num)
{if(arr != NULL && rows > 0 && cols > 0){int row = 0;int col = cols - 1;while(row < rows && col > 0){if(num == arr[row*cols + col]){printf("num = (%d, %d)\n", row, col);return 1;}if(num > arr[row*cols + col]){++row;}else{--col;}}}return 0;
}int main()
{int array[][3] = {{1, 2, 3},{2, 3, 4},{3, 4, 5},};int ret2 = findNumInYangTableau((int*)array, 3, 3, 4);}

注意这种方法, 如果这个二维数组的空间是 malloc 或者 new出来的, 那么可能会出现异常, 因为malloc 或 new 出来的内存不一定是连续的
而这种方法arr[row*cols + col], 是在访问连续内存

C/C++ 二维数组传参方法总结相关推荐

  1. 二维数组传参||传值

    先给出问题: 像下面这样的数组,在函数中如何传参?也就是说如何保证虚参与实参类型一致. char str_arr[3][10] = {"yes","no",&q ...

  2. 什么是二维数组以及二维数组传参

    什么是二维数组 当刚看见二维数组时肯定会对二维数组有一些疑惑二维数组是什么? int arr[4] = { 1,2,3,4 };//这个便是一维数组 以 int 类型为例子当 int 类型的元素集合在 ...

  3. 【概念辨析】二维数组传参的几种可能性

    一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针.         ...

  4. 漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案

    在使用小鹅通云服务API开发过程中,当传递二维数组时,后台总是提示The user id list must be an array.即传递的参数必须是数组. 文档请求标准格式 {"acce ...

  5. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

  6. 关于二维数组传参做形参

    二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正确 ...

  7. 多维数组之二维数组传参、返回值、申请内存问题

    目录 多维数组 存储顺序 二维数组基础知识 数组名 下标 指向数组的指针 二维数组使用 初始化 作为函数参数的二维数组 二维数组返回值与申请内存问题 多维数组 如果某个数组的维数不止1个,它就被称为多 ...

  8. 如何把二维数组传参给函数

    1.传递"数组指针" #include <stdio.h>void output( int (*pa)[3], int n ) //这个函数只能输出n行3列的二维数组 ...

  9. java语言二维数组转置_java实现二维数组转置的方法示例

    本文实例讲述了java实现二维数组转置的方法.分享给大家供大家参考,具体如下: 这里在文件中创建Test2.Exchange.Out三个类 在Exchange类中编写exchange()方法,在方法中 ...

  10. python求二维数组各行最大值_python+numpy按行求一个二维数组的最大值方法

    问题描述: 给定一个二维数组,求每一行的最大值 返回一个列向量 如: 给定数组[1,2,3:4,5,3] 返回[3:5] import numpy as np x = np.array([[1,2,3 ...

最新文章

  1. 云计算读书笔记(二)
  2. 深入理解MySQL执行过程及执行顺序
  3. ActiveX组件及其注册 (轉)
  4. MySQL关于事务控制、视图、存储过程和函数
  5. centos6.8 如何编译php,centos 6.8 安装编译php7.1.2
  6. hadoop hdfs访问权限更新延迟问题
  7. android SharedPreferences实现用户的注册和保存账号密码
  8. 【转】1.9 Asp.Net Core 轻松学-多线程之取消令牌(
  9. Anaconda3安装后,解决cmd中jupyter,pip,python不是内部命令以及jupyter更改默认路径问题
  10. 四个月备考计算机考研,这些考研走心建议帮你度过剩下的四个月
  11. IIC协议详解,附单片机软件模拟源码
  12. 如何看药博士系统服务器的站点,药博士系列管理软件
  13. teamviewer超时后连接被阻断。您的许可证对您与伙伴的最大话时间有所限制
  14. D3DTOP_DOTPRODUCT3的计算公式
  15. 知网 BibTeX自动生成(使用BibTeX引用中文参考文献)
  16. 新闻 华为 鸿蒙,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送
  17. 高密度配线架选择指南
  18. 获取搜狗音乐的真实路径方法
  19. signature=1e5c9cadfac910b9cd55ef06301b71df,Vision-based process control in layered manufacturing
  20. 梦熊联盟1月普及组月赛游记

热门文章

  1. NFT+体育,卡塔尔世界杯有哪些NFT看点!
  2. 计算机考试反思1000,高一期中考试反思1000字,高一学生期中考试总结
  3. 科研狗工具大合集,赶紧集合看过来
  4. Linux 启动管理(详细版)
  5. STM32锁死解锁方法
  6. 简单谈谈自己对前端的感想
  7. 华东师范大学计算机专硕学硕,学硕?专硕?该怎么选择
  8. 【Python表白代码】“情话都是我抄来的,想说给你听是真的。”情人节快乐~
  9. 清华大学计算机音乐,清华特奖候选人丨胡昌然:关于机器,音乐和灵魂
  10. 教育部要求“强保障、上水平”,课后服务该如何提质增效?