【发布时间】:2013-04-02 14:13:28
【问题描述】:
我的程序中有这样的矩阵:
double m[3][4] =
{
{2, 4, 5, 7},
{4, 5, 1, 12},
{9, 12, 13, -4}
};
我想将其转换为 double** 类型。
我已经尝试过简单的double** a = (double**)m;,但它不起作用(当我尝试读取任何值时,我得到“访问冲突读取位置 0x00000000。”,这意味着我正在尝试从 @987654324 读取@地址。
我找到了几乎可行的解决方案:
double *b = &m[0][0];
double **c = &b;
当我阅读字段c[0][any]时它有效
但是当我尝试从字段c[1][0] 中读取值时,会出现同样的 NULL 地址读取问题。
将double m[3][4] 数组转换为类型double** 的正确方法是什么?
编辑: 你说那是不可能的。所以我会稍微改变一个问题。如何将二维双精度数组作为参数传递给函数?我的函数有原型:
void calculate(double **matrix, int n); //where matrix size is always n by n+1
而且它与动态分配的数组一起工作得很好。我怀疑让它工作的唯一方法是分配新的动态数组并一个接一个地复制原始静态数组......
【问题讨论】:
-
铸造不会使这项工作。
double **需要一个指向双精度指针的指针,而这不是你所拥有的。您可以可能使用double *并明确传递数组维度。 -
数组数组和指向指针的指针不是一回事。内存中的布局不匹配,因此一个不能用于另一个。
-
使用 Vaughn Cato 提出的技术。如果它需要一个
double**,你需要给它一个double**,而不是一个二维数组。 -
您的
calculate函数需要一个指向array 的指针。你的问题是你没有那个。您的解决方案是创建它。阅读 Vaughn Cato 的回答。
标签: c++ pointers casting double