编程语言
首页 > 编程语言> > 【C++】 二维数组的返回值问题

【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