c++ - 使用多维数组

标签 c++ pointers multidimensional-array

<分区>

我正在尝试构建一个适用于宽度矩阵的类。在它的构造函数中,它想知道数组的高度和宽度,它想要数组本身,然后它必须能够打印数组并重载一些运算符。 Array 必须是 float 数组。这是我到目前为止所拥有的: 两个定义的参数:

#define HEIGHT 3
#define WIDTH 3

制作数组:

void Assignment_1::start(){
    float **matrix = new float *[HEIGHT];
    for (int i = 0; i < HEIGHT; i++){
        matrix[i] = new float[WIDTH];
    }
    //  5   6   11
    //  7   2   8
    //  5   1   4
    matrix[0][0]=5;
    matrix[0][1]=6;
    matrix[0][2]=11;
    matrix[1][0]=7;
    matrix[1][1]=2;
    matrix[1][2]=8;
    matrix[2][0]=5;
    matrix[2][1]=1;
    matrix[2][2]=4;
    Matrix * matrixA = new Matrix(HEIGHT,WIDTH,matrix);
    matrixA->printMatrix();
}

现在我明白 C++ 二维数组存在一个正常的 HEIGHT 指针数组,每个指针指向一个 WIDTH 大小的数组。

构造函数和全局变量:

Matrix::Matrix(int width, int height, float **array){
    this->height = height;
    this->width = width;
    this->array = array;
}
//in Matrix.h:
int width, height;
float ** array;

到此为止一切都很好。现在我想通过打印来实际使用数组:

void Matrix::printMatrix(){
    for (int h = 0; h < height; h++){
        for (int w = 0; w < width;w++){
            std::cout <<array[height][width]<<"    ";
        }
        std::cout << std::endl;
    }
}

这就是问题所在:程序直接崩溃了。我有点明白它崩溃的原因:我想我需要得到 array[h] 指向的内容(这是一个大小为 width 的 float 组),但尝试这样做会给我错误:无法将 float* 转换为 float[] *。我需要做什么?

最佳答案

The robot already answered your question:

for (int h = 0; h < height; h++){
    for (int w = 0; w < width;w++){
        std::cout <<array[height][width]<<"    ";
                  //      ^^^^^^  ^^^^^
    }
    std::cout << std::endl;
}

您正在访问哪些条目?好吧,总是 array[height][width]。但是,array 仅包含 height 元素,因此此访问会导致未定义的行为。只需应用您的循环变量 hw:

for (int h = 0; h < height; h++){
    for (int w = 0; w < width;w++){
        std::cout << array[h][w]<<"    ";
    }
    std::cout << std::endl;
}

但是,这仍然远非最佳。您应该使用更易于使用的类型,例如 std::vector:

typedef std::vector<float> float_vector;
typedef std::vector<float_vector> float_matrix;
float_matrix matrix(HEIGHT,float_vector(WIDTH));

std::vector 是最重要的类型之一。掌握它。

关于c++ - 使用多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065858/

相关文章:

java - 如何从二维数组中打印坐标?

python - 变维数组

c++ - boost::bind对应的类型定义

c - 在 C 中使用结构指针,即使它们没有声明

javascript - 二维数组及其矩阵表示约定

c++ - 将 C++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]

c++ - 为什么可以将整数值赋给未初始化的指针

c++ - LLDB 数据格式化程序和 C 数组

c++ - 在 QT gui 中,如何更改 QStatusBar 中指定文本的颜色?

c++ - FindResourceEx 和后备语言