二维数组作为函数的参数和返回值
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]; 这种形式的话,其空间分配是在栈里面,随着函数调用结束就会被自动回收,其返回内容不确定性。。
二维数组作为函数的参数和返回值相关推荐
- C++笔记 二维数组作为函数的参数详解 三种传参的方法总结 注意要点总结
文章目录 1.C/C++ 二维数组作为函数的参数 2.不合法写法总结 3.测试案例 3.1 传参方式1 3.2 传参方式2 3.3 传参方式3 4.运行结果 5.总结 1.C/C++ 二维数组作为函数 ...
- C语言-二维数组做函数的参数
文章目录 1 引例 2 观点1 这种使用方法是错误的 3 观点2 根本不需要这么做 4 二维数组做函数参数的方法 4.1 方法1 4.2 方法2 4.3 方法3 5 与Java的不同 1 引例 下面的 ...
- C++二维数组作为函数参数
#include <iostream> #include <Windows.h>//版本一 省略函数 //二维数组省略一个高维函数 但低维位函数必须定义 void printf ...
- C语言 | 二维数组作为函数参数
1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 偶然间发现C语言二维数组作为函数的参数是个比较容易出错的问题. ...
- C++二维数组做函数参数
C++二维数组做函数参数 二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...}//以下两种可以忽略行数 f ...
- 如何将二维数组作为函数的参数传递
如何将二维数组作为函数的参数传递 声明: 如果你是得道的大侠,这篇文章可能浪费你的时间,如果你坚持要看,我当然感觉很高 兴,但是希望你看完了别骂我!如果你发现我这篇文章有错误的话,你可以提出批评以及 ...
- php 二维数组去除一项,PHP二维数组提取函数----把不需要的数据剔除
首先说明一些这个函数的应用场景,比如说你得到的数据是个二维数组,里面的很多成员其实是不必要的,比如说api调用后不必要给别人返回一些用不到的垃圾数据吧,如下是代码. /* * delMemberGet ...
- C语言二维数组作为函数参数传递
二维数组存放方式 二维数组在内存中是按行存放的,先存储第一行,在接着存储第二行-.. 二维数组作为函数参数 二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
最新文章
- oozie调度中的重试和手工rerun一个workflow
- 提升工作沟通,你需要明白这些内容
- QUESTION-PRINCIPLE-ANSWER(SOLUTION) RELATIONSHIP
- Vim 高亮显示单词并查找
- 有趣c语言编程经典例子,C语言简单有趣例子总结ZWF.pdf
- request for KPI tile number display could not be executed for the second time
- expected at least 1 bean which qualifies as autowire candidate. Dependency a...
- oracle进入rman报错,Oracle学习系列之Rman学习(三)
- win+apache实现ssl的证书认证
- codevs3143 二叉树的序遍历
- Latex空格一个字符\空格
- 区块链 FISCO BCOS智能合约存储存放位置
- 你想要的宏基因组-微生物组知识全在这(2020.6)
- 计算机绘图中有六种方法绘圆,绘图用品和制图方法
- 天刀霸王枪服务器怎么维护了,霸王枪27日合服 11批天涯合服维护公告
- MIT5K数据集的使用
- 在线教育20年:在线教育的未来发展趋势
- LM2596的肖特基二极管选择的注意点
- C# 闹钟「定时提醒,整点报时」
- Apache Camel - 4 - Camel元素