【问题标题】:Returning a matrix with constant values in c++在c ++中返回具有常量值的矩阵
【发布时间】:2018-08-21 18:00:04
【问题描述】:

如何从函数返回二维常量值数组? 我需要返回这样的东西:

//I don't even know if this is the best way to do 2d arrays in c++.
const int matrix[4][2] = {
    {10,11},
    {12,13},
    {14,15},
    {16,17}
};

这是我尝试过的:

#include <iostream>

using namespace std;

int** createMatrix();

int main(){
    int **m = createMatrix();
    return 0;
}

const int** createMatrix(){
    const int **matrix = new const int*[4];

    matrix[0] = new const int[2] = {10,11};
    matrix[1] = new const int[2] = {12,13};
    matrix[2] = new const int[2] = {14,15};
    matrix[3] = new const int[2] = {16,17};

    return matrix;
}

我得到的输出:

main.cpp:在函数“const int** createMatrix()”中: main.cpp:12:13:错误:混淆了“const int** createMatrix()”的新声明 const int** createMatrix(){ ^~~~~~~~~~~~~~~

main.cpp:5:7: 注意:旧声明‘int** createMatrix()’ int** createMatrix(); ^~~~~~~~~~~~~~~

main.cpp:15:29:错误:“const int”的“new”中未初始化 const 矩阵[0] = 新常量 int[2] = {10,11}; ^

main.cpp:16:29:错误:“const int”的“new”中未初始化 const 矩阵[1] = 新常量 int[2] = {12,13}; ^

main.cpp:17:29:错误:“const int”的“new”中未初始化 const 矩阵[2] = 新常量 int[2] = {14,15}; ^

main.cpp:18:29: error: uninitialized const in ‘new’ of ‘const int’ 矩阵[3] = new const int[2] = {16,17};

【问题讨论】:

  • 函数有两种不同的类型 iint** createMatrix();和 const int** createMatrix(){
  • 一个常量值数组到底有什么意义呢?每次调用都会创建一个新的数组副本,所以谁在乎一个调用者是否更改了他的副本?这不会影响其他调用者。

标签: c++ arrays pointers


【解决方案1】:

您应该考虑将其保存为长度为 (xsize*ysize) 的一维数组,据称这比保存二维数组更好。

【讨论】:

    【解决方案2】:

    函数声明和函数定义有不同的返回类型。

    int** createMatrix();
    

    const int** createMatrix(){
    

    也是这样的初始化

    matrix[0] = new const int[2] = {10,11};
    

    不正确。

    你的意思好像是下面这个

    #include <iostream>
    
    const int** createMatrix();
    
    int main()
    {
        const int **m = createMatrix();
        return 0;
    }
    
    const int ** createMatrix()
    {
        const int **matrix = new const int*[4];
    
        matrix[0] = new const int[2] {10,11};
        matrix[1] = new const int[2] {12,13};
        matrix[2] = new const int[2] {14,15};
        matrix[3] = new const int[2] {16,17};
    
        return matrix;
    }
    

    【讨论】:

      【解决方案3】:

      简单的解决方案是创建一个数组数组,就像您首先显示的那样,然后返回它。

      在函数内部设置static,这样它的生命周期就不会结束。并且记得返回正确的类型(数组数组和指向指针的指针不一样)。

      可选择使用std::array,而不是普通的 C 样式数组。

      如果大小可在运行时配置,则使用std::vector

      【讨论】:

        猜你喜欢
        • 2018-02-25
        • 2011-09-16
        • 2018-09-08
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多