我有矩阵 M:
float M[4][3] = {
0, 0, 0,
0, 1, 1,
1, 0, 1,
1, 1, 0};
我需要转换 M 以使用方法“foo”:
foo(float **matrix){
printf("%f",matrix[0][0]);
}
我使用以下方法成功编译了代码:
foo( (float**) M )
但是当我执行它时,出现了段错误。怎么了?我在 Ubuntu Oneiric 中使用 g++。
提前致谢。
好的,谢谢 Luchian,但是使用怎么样:
float **M = new float*[4];
M[0] = {0,0,0};
我知道它不能编译,但它有类似的东西吗?
最佳答案
如果你想(或需要)自己做算术,请避免强制转换:
void foo(float **pmatrix)
{
float *matrix = *pmatrix;
for (int r = 0; r < 4; ++r)
{
for (int c = 0; c < 3; ++c)
printf("%f ", matrix[(r * 3) + c]);
printf("\n");
}
}
float M[4][3] = {
0, 0, 0,
0, 1, 1,
1, 0, 1,
1, 1, 0
};
int main()
{
float *p = &M[0][0];
foo(&p);
}
但这段代码很丑陋且容易出错,如果可能的话,请遵循 Luchian 的建议并更正声明。
关于c++ - 静态矩阵转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827509/