首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从c++中的函数返回二维数组

从c++中的函数返回二维数组
EN

Stack Overflow用户
提问于 2013-04-10 01:33:14
回答 4查看 41K关注 0票数 3

我想使用一个从函数返回的二维整数数组,我应该如何定义函数的返回值?我使用了int**,但是编译器给出了错误:

代码语言:javascript
运行
复制
int**  tableCreator(){
    int** table=new int[10][10];
    for(int xxx=1;xxx<10;xxx++){
        for(int yyy=1;yyy<10;yyy++){
            table[xxx][yyy]=xxx*yyy;
        }
    }
    return(table);  //Here:cannot convert from 'int (*)[10]' to 'int **'
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-10 01:34:07

代码语言:javascript
运行
复制
int** table=new int[10][10];

这是错误的。在C/C++中,不能以这种方式为2D动态数组分配空间。

同时,您将数组大小声明为10,因此索引来自0-9,但是您试图在嵌套的for循环中为索引10赋值,这也是不正确的。

您可以执行以下操作进行分配:

代码语言:javascript
运行
复制
int** table = new int*[10];
for (int i = 0; i < 10; ++i)
{
   table[i] = new int[10];
}
票数 5
EN

Stack Overflow用户

发布于 2013-04-10 01:42:52

试试这个:

代码语言:javascript
运行
复制
#include <cstdio>
#include <cstdlib>


int** createTable(int rows, int columns){
    int** table = new int*[rows];
    for(int i = 0; i < rows; i++) {
        table[i] = new int[columns]; 
        for(int j = 0; j < columns; j++){ table[i][j] = (i+j); }// sample set value;    
    }
    return table;
}
void freeTable(int** table, int rows){
    if(table){
        for(int i = 0; i < rows; i++){ if(table[i]){ delete[] table[i]; } }
        delete[] table;    
    }
}
void printTable(int** table, int rows, int columns){
    for(int i = 0; i < rows; i++){
        for(int j = 0; j < columns; j++){
            printf("(%d,%d) -> %d\n", i, j, table[i][j]);
        }    
    }
}
int main(int argc, char** argv){
    int** table = createTable(10, 10);
    printTable(table, 10, 10);
    freeTable(table, 10);
    return 0;
}

在C中,你需要第二个循环来分配一个二维数组,并且需要类似的操作来释放它。二维数组本质上是数组的数组,因此可以表示为指针数组。循环初始化指向指针的数组。

根据下面与@Eric Postpischil的谈话澄清:更改了createTable,以进行真正动态分配的行/列计数。

票数 6
EN

Stack Overflow用户

发布于 2013-04-10 01:50:51

通常,用于指向数组的类型是指向数组元素的指针。由于int二维数组是int数组的数组,因此您需要一个指向int数组的指针。对于某些维度N,此类型的C++语法为int (*)[N]。此代码演示:

代码语言:javascript
运行
复制
#define N   10

int (*tableCreator())[N]
{
    int (*table)[N] = new int[N][N];

    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            table[i][j] = i*j;

    return table;
}


#include <iostream>


int main()
{
    int (*t)[N] = tableCreator();

    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
            std::cout << t[i][j] << ' ';
        std::cout << '\n';
    }

    delete [] t;

    return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15908632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档