2012-12-10 85 views
2

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

#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; 
     } 
} 
+0

不,它是多余的。 – prazuber

回答

4

这是没有必要的和潜在的危险。

新表达式的类型已经为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. 
0

该类型的基质是int**,在这种情况下,*不仅仅是一个指针,但它是一个指向数组的指针。所以**意味着一个指向数组指针数组的指针。你如何得到矩阵的2维。

2

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

在经书C,这是习惯,从投malloc的动态内存分配。

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