矩阵指针语法

时间:2012-12-10 07:36:06

标签: c++ pointers syntax matrix

我的问题是为什么他们在int**指针的声明中使用(matrix)作为指向数组的指针。有必要吗?它有什么不同?

#include <iostream>
using namespace std;
int main()
{
    int **matrix;       // Pointer to matrix
    matrix = (int **) new int *[2]; // Why use (int**) is it necessary?
    for (i = 0; i < 2; i++)
        matrix[i] = new int[2];
    for (i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++) {
            matrix[i][j] = j + i;
        }
}

3 个答案:

答案 0 :(得分:4)

这是不必要的,也有潜在危险。

new-expression的类型已经int**,适合分配给matrix。无需将其转换为自己的类型。

即使需要转换,也不应使用C风格的强制转换。这样做会强制进行转换,即使它没有意义,这是隐藏错误的一种非常好的方法;例如,如果你不小心new错误的类型:

matrix = new int[2];           // Friendly compiler error
matrix = (int**) new int[2];   // No diagnostic, likely to cause weird
                               // run-time errors.

答案 1 :(得分:2)

可能的原因:他们是C程序员

在C语言中,习惯上从malloc转换动态内存分配。

matrix = (int**) malloc(2*sizeof(int*));// C
matrix = (int**) new int*[2]; // local argot

答案 2 :(得分:0)

矩阵的类型是int**,在这种情况下,*不仅仅是一个指针,而是一个指向数组的指针。所以**表示指向数组指针数组的指针。这就是如何得到矩阵的2维。