数组作为函数返回值
2026-08-06 20:22:43
发布于:安徽
前言
话说真的会有人用这种复杂的东西吗?
正文
这里是一个教程,可能教会你如何将数组作为函数返回值(话说这是我几年前的东西了?)
在我们学链表的时候,我们学到了:
struct node{
int data; // 数据域
node* next; // 指针域
};
node* p = new node; // 动态申请一个新的链表节点
这里提到的实际上就是可以动态申请一个指针空间。由于数组的底层逻辑实际上是指针(不信你可以试试输出数组a:cout<<a<<endl),所以,数组也可以用来申请空间。
int* array = new int[3]; // 申请指针array数组,长度为3
因此,作为函数返回值,我们可以写:
int* fun(){
// 返回数组
}
结合两个代码,就可以写出下面这个初始化函数:
int* fun(int n, int a){ // 创建一个长度为n、每个元素值为a的int类型数组
int* array = new int[n]; // 申请一个长度为n的int类型数组
for (int i = 0; i < n; i ++) array[i] = a; // 这里创建的array数组是可以修改的
return array; // array数组本来就是一个指针,可以直接返回
}
有了上面的函数,我就可以直接在主函数里根据输入生成一个合适大小的空数组,并完成遍历:
int main(){
int n;
cin >> n;
int* array = fun(n, 0); // 动态申请一个长度为n的空数组
for (int i = 0; i < n; i ++) cout << array[i] << endl; // 遍历
}
你会发现上面的遍历还是同正常的数组一样,且完美解决了平时在主函数里开一个大小为 的数组会Runtime Error的问题。
(哇塞,原来不是炒冷饭重新发一遍,我还有了一个新发现)
话说二维数组能否作为函数的返回值呢?
我试过,如果直接写:
int* fun(int n, int m){ // 我想用这个函数生成一个n行m列的数组
int* array = new int[n][m]; // 生成数组ing
return array;
}
那么恭喜你喜提Compile Error,原因是二维数组和一维数组有点不一样。
如果我现在有一个二维数组a[10][10],我单独输出a[0],我发现它还是个地址。因而,我理解为二维数组是一维数组组成的数组。
由于一维数组本质是指针,那么,我不妨大胆假设二维数组也是一个指针,只不过指向的是一维数组的地址。
因而,我写出了如下代码:
int** fun(int n, int m){ // 创建一个n行m列,默认每个元素都是0的int类型二维数组
int** array=new int*[n]; // 申请一个长度为n的指针数组
for (int i = 0; i < n; i ++) array[i] = new int[m]; // 每个位置申请长度m的数组
return array; // array返回
}
如果我要遍历这个二维数组,我可以这样子:
int main(){
int n, m;
cin >> n >> m;
int** array = fun(n, m);
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
cout << array[i][j] << " ";
}
cout << endl;
}
}
那么,依次类推,可知:如果要函数返回一个 维的数组,只需要一个带有 个星号的指针即可。
后记
注意事项:
- 我没有强迫任何人用这个东西,如果考试的时候因为写这个东西而报错扣分什么的,我一概不负责
- 话说现在有
vector<int>了你还用这个干什么?我只不过无聊玩玩,好玩而已。你呢?暑集结束了?
这里空空如也














有帮助,赞一个