2012-12-10 87 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