You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现C++函数创建二维数组并返回数组与size后传入printArray?

问题解决:C++中创建二维数组并返回数组与尺寸的实现

原需求

编写createArray函数创建二维数组,同时返回该数组与size变量,再将这两个值传入printArray函数完成打印。原代码存在返回方式错误、结构化绑定失败等问题,无法正常运行。

原代码

#include <iostream>
using namespace std;

int createArray(){
int array[10][10] = {0};
 int x, y;
 int size = 0;

 while(x != 0 && y !=0){
    cin >> x >> y;
        while( x<0 || x>10 || y<0 || y>10){
            cout << "error" << endl;
            cin >> x >> y;
        }
    if(x>0 && y >0){
        array[x-1][y-1] = 1;
    }
    if(size < x){
        size = x;
    }
    if (size < y){
        size = y;
    } 
    
 } 
return(array, size);
}

int printArray(int array[10][10],int size){
    int i, j;
    for(i=0; i<size; i++){
        for(j=0; j<size; j++){
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}


int main() {
/* 
What happens here? I thought I could do something like..

auto [arrayA, sizeA] = createArray(); 
printArray(arrayA, sizeA);
but that's not working

*/
}

错误分析

  • 返回值类型错误:createArray声明返回int,但试图返回数组和size,且return(array, size)是逗号表达式,实际仅返回size的值,完全不符合需求。
  • 局部数组销毁问题:函数内定义的array[10][10]是局部变量,函数执行结束后会被销毁,即使能返回指针,后续使用也会触发未定义行为。
  • 结构化绑定前提不满足:结构化绑定要求返回值为结构体、类、std::pair/std::tuple等类型,原函数返回int,无法使用该语法。
  • 未初始化变量:x和y未初始化就进入while(x !=0 && y !=0)判断,会触发未定义行为。

修正后的代码

通过结构体封装数组和尺寸,满足返回多个值的需求,同时修复其他逻辑问题:

#include <iostream>
using namespace std;

// 定义结构体封装数组和尺寸
struct ArrayResult {
    int arr[10][10];
    int size;
};

ArrayResult createArray() {
    ArrayResult result{}; // 初始化所有元素为0
    int x, y;
    result.size = 0;

    // 先读取一组输入再进入循环,避免未初始化判断
    cin >> x >> y;
    while (x != 0 && y != 0) {
        // 校验输入范围
        while (x < 0 || x > 10 || y < 0 || y > 10) {
            cout << "error" << endl;
            cin >> x >> y;
        }
        if (x > 0 && y > 0) {
            result.arr[x-1][y-1] = 1;
        }
        // 更新最大尺寸
        if (result.size < x) {
            result.size = x;
        }
        if (result.size < y) {
            result.size = y;
        }
        // 读取下一组输入
        cin >> x >> y;
    }
    return result;
}

void printArray(int array[10][10], int size) {
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    // 使用结构化绑定获取返回值
    auto [arrayA, sizeA] = createArray();
    printArray(arrayA, sizeA);
    return 0;
}

关键修正点说明

  1. 结构体封装返回值:定义ArrayResult结构体包含二维数组和size,使函数能返回多个关联值,满足结构化绑定的要求。
  2. 初始化局部变量:用ArrayResult result{}初始化结构体,确保数组元素默认值为0,同时避免未初始化变量的问题。
  3. 调整循环逻辑:先读取一次输入再进入循环,避免使用未初始化的x和y进行判断。
  4. 简化打印函数:打印函数无需返回值,改为void类型更合理。

内容的提问来源于stack exchange,提问作者user20412196

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:45:36