ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【C++】 二维数组的返回值问题

2022-08-11 18:31:07  阅读:125  来源: 互联网

标签:function arr return int 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;
}

 

标签:function,arr,return,int,C++,二维,数组,返回值
来源: https://www.cnblogs.com/realHarvey/p/16577074.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有