2

我的问题是为什么他们在指针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;
        }
}
4

3 回答 3

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.
于 2012-12-10T07:46:35.130 回答
2

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

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

matrix = (int**) malloc(2*sizeof(int*));// C
matrix = (int**) new int*[2]; // local argot
于 2012-12-10T07:51:24.350 回答
0

矩阵的类型是int**,在这种情况下*不仅仅是一个指针,而是一个指向数组的指针。所以**意味着指向数组指针数组的指针。这就是你如何获得矩阵的二维。

于 2012-12-10T07:43:49.197 回答