【C++】 二维数组的返回值问题
2022/8/12 1:25:33
本文主要是介绍【C++】 二维数组的返回值问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
< 解决二维数组最好的方法就是把它当作一个一维数组 --鲁迅 >
我们都知道,数组不能做函数的返回值,在看到这里之前都试过把数组当返回值罢(悲
一维数组:
我们常用的返回一维数组的方法::用 数组的首地址 代替数组作为返回值:
int* function(int arr[2]) { return arr; }
改写一下:
auto function(int arr[2]) -> int(*) { //当然写 int* 写可以 return arr; }
二维数组:
【错误的】试着用这种方法套在二维数组上:
int** function(int arr[2][2]) { return arr; //error }
用到了二重指针,可见这种方法很糟糕!返回值如何选择都是错误的,因为无法返回二重指针。
【正确的】那我们用指针数组 int* array[10] 来解决这个问题
auto function(int arr[2][2]) -> int(*)[2]{ //这里就不可以写成 int*[2] 了 return arr; }
【剖 pou 析】
这里表面上用的是 指针数组,返回值类型 看起来像数组。非也::看图:
这个int(*)[2]内部是这样的,也就是:它的首地址和子元素 [ 0 ] 的首地址一模一样, 意味着你返回一个它和返回一个一维数组没有本质上的区别
int(*)[2] 和 int(*) 本质都是一样的,前者不过是两个不同的后者拼起来的罢了,所以 return arr 都能解决
附加:
typedef int (*Arrrr)[2]; // 丑陋 using Arrr = int(*)[2]; // 优雅 Arrr function(int arr[2][2]) { return arr; }
这篇关于【C++】 二维数组的返回值问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-28Elasticsearch - kibana画图
- 2024-03-28我最近买的书里面带的CD盘,放电脑里后,说是0字节,但是可以播放,不能把里面的东西复制出来
- 2024-03-26sqlalchemy.exc.objectnotexecutableerror: not an executable object
- 2024-03-26no dashboards are active for the current data set
- 2024-03-26torch sum
- 2024-03-26format' is not a recognized built-in function name
- 2024-03-26sources list kali
- 2024-03-26matlab p code
- 2024-03-26mean of empty slice
- 2024-03-26unable to attach or mount volumes: unmounted volumes