1. 二维数组作为函数的参数

 (1)错误的做法:将二维数组传递给二维指针

//实参是二维数组,形参是int**,这样做的话编译器会报错
int main() {int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };int row = sizeof(arr) / sizeof(arr[0]); //行数int column = sizeof(arr[0]) / sizeof(arr[0][0]); //列数cout << row << " " << column;printArray(arr,3,4);return 0;
}
void printArray(int** arr, int size_1, int size_2) {for (int i = 0; i < size_1; i++) {for (int j = 0; j < size_2; j++) {cout << arr[i][j] << ' ';}}
}

原因分析:类比一维数组可以传递给指针,我们就会想当然的将二维数组传递给二维指针,但实际运行会发生错误,原因是,二维数组的类型是type (*)[size],而二维指针的类型是type**,是属于两个不同的类型,以上述程序为例,int arr[3][4]是一个包含了3个指向长度为4的数组的指针数组,而int ** 是一个指向int * 的指针,两者不可等同。
 (2)正确的做法:将二维数组传递给数组指针

printArray(arr,3,4);
void printArray(int(*arr)[4], int size_1, int size_2) {for (int i = 0; i < size_1; i++) {for (int j = 0; j < size_2; j++) {cout << arr[i][j] << ' ';}}
}

[注]:要注意区分 int (*arr)[4]int* arr[4]后者是指针数组,它表示一个数组,并且数组中有4个指针变量,前者是数组指针,是指向一维数组的指针。

2.将二维数组作为函数返回值

将二维数组返回是通过二维指针实现的,举个例子:

int** returnArray()
{int arr[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };int row = 3; //行数int column = 4; //列数int** rArr;//定义二维指针rArr = (int**)malloc(row * sizeof(int*)); //初始化二维数组的行for (int i = 0; i < row; i++) {rArr[i] = (int*)malloc(column * sizeof(int)); //初始化二维数组的列rArr[i] = arr[i];// 这样赋值是错误的,因为arr会在函数调用结束后就自动回收,这样指向该地址的指针的值就不确定了}//赋值for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {rArr[i][j] = i * 3 + j + i*1; // 0,1,2,3,4,5,6,7,8,9,10,11}}return rArr;
}//主函数
int main() {int** rArr = returnArray();for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {cout << rArr[i][j] << ' ';}}return 0;
}

[注]:如果二维数组或者一维数据是在所调用函数内申请的,这时一定要用new或者malloc去申请空间的分配(堆空间),如果使用如int arr[3][4]; 这种形式的话,其空间分配是在栈里面,随着函数调用结束就会被自动回收,其返回内容不确定性。。

二维数组作为函数的参数和返回值相关推荐

  1. C++笔记 二维数组作为函数的参数详解 三种传参的方法总结 注意要点总结

    文章目录 1.C/C++ 二维数组作为函数的参数 2.不合法写法总结 3.测试案例 3.1 传参方式1 3.2 传参方式2 3.3 传参方式3 4.运行结果 5.总结 1.C/C++ 二维数组作为函数 ...

  2. C语言-二维数组做函数的参数

    文章目录 1 引例 2 观点1 这种使用方法是错误的 3 观点2 根本不需要这么做 4 二维数组做函数参数的方法 4.1 方法1 4.2 方法2 4.3 方法3 5 与Java的不同 1 引例 下面的 ...

  3. C++二维数组作为函数参数

    #include <iostream> #include <Windows.h>//版本一 省略函数 //二维数组省略一个高维函数 但低维位函数必须定义 void printf ...

  4. C语言 | 二维数组作为函数参数

    1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 偶然间发现C语言二维数组作为函数的参数是个比较容易出错的问题. ...

  5. C++二维数组做函数参数

    C++二维数组做函数参数 二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...}//以下两种可以忽略行数 f ...

  6. 如何将二维数组作为函数的参数传递

    如何将二维数组作为函数的参数传递 声明: 如果你是得道的大侠,这篇文章可能浪费你的时间,如果你坚持要看,我当然感觉很高 兴,但是希望你看完了别骂我!如果你发现我这篇文章有错误的话,你可以提出批评以及 ...

  7. php 二维数组去除一项,PHP二维数组提取函数----把不需要的数据剔除

    首先说明一些这个函数的应用场景,比如说你得到的数据是个二维数组,里面的很多成员其实是不必要的,比如说api调用后不必要给别人返回一些用不到的垃圾数据吧,如下是代码. /* * delMemberGet ...

  8. C语言二维数组作为函数参数传递

    二维数组存放方式 二维数组在内存中是按行存放的,先存储第一行,在接着存储第二行-.. 二维数组作为函数参数 二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小 ...

  9. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

最新文章

  1. oozie调度中的重试和手工rerun一个workflow
  2. 提升工作沟通,你需要明白这些内容
  3. QUESTION-PRINCIPLE-ANSWER(SOLUTION) RELATIONSHIP
  4. Vim 高亮显示单词并查找
  5. 有趣c语言编程经典例子,C语言简单有趣例子总结ZWF.pdf
  6. request for KPI tile number display could not be executed for the second time
  7. expected at least 1 bean which qualifies as autowire candidate. Dependency a...
  8. oracle进入rman报错,Oracle学习系列之Rman学习(三)
  9. win+apache实现ssl的证书认证
  10. codevs3143 二叉树的序遍历
  11. Latex空格一个字符\空格
  12. 区块链 FISCO BCOS智能合约存储存放位置
  13. 你想要的宏基因组-微生物组知识全在这(2020.6)
  14. 计算机绘图中有六种方法绘圆,绘图用品和制图方法
  15. 天刀霸王枪服务器怎么维护了,霸王枪27日合服 11批天涯合服维护公告
  16. MIT5K数据集的使用
  17. 在线教育20年:在线教育的未来发展趋势
  18. LM2596的肖特基二极管选择的注意点
  19. C# 闹钟「定时提醒,整点报时」
  20. Apache Camel - 4 - Camel元素

热门文章

  1. Django 误删数据表恢复
  2. MySQL启动和关闭命令
  3. 从”JAVA“而终 16:java sql学习资料大全
  4. ubantu之qq安装
  5. 服务发现【浅谈当下】
  6. 开始学习 IOS 开发,学习环境搭建
  7. xvfb的安装、配置、运行(Linux)
  8. python常用函数汇总
  9. 用 JavaScript 实现简单拼图游戏
  10. 深度剖析知识增强语义表示模型——ERNIE