我的问题是为什么他们在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;
}
}
答案 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维。