C++ 指向指针的静态矩阵转换
我有矩阵M:C++ 指向指针的静态矩阵转换,c++,matrix,C++,Matrix,我有矩阵M: float M[4][3] = { 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}; 为了使用方法“foo”,我需要使用M: 我使用以下方法成功编译了代码: foo( (float**) M ) 但当我执行它时,我得到了一个片段错误。怎么了?我正在Ubuntu Oneiric中使用g++ 提前谢谢 好的,谢谢Luchian,但是使用: float **M = new float*[4]; M[0] = {0,0,0};
float M[4][3] = {
0, 0, 0,
0, 1, 1,
1, 0, 1,
1, 1, 0};
为了使用方法“foo”,我需要使用M:
我使用以下方法成功编译了代码:
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);
}
void foo(浮动**pmatrix)
{
浮点*矩阵=*pmatrix;
对于(int r=0;r<4;++r)
{
对于(int c=0;c<3;++c)
printf(“%f”,矩阵[(r*3)+c]);
printf(“\n”);
}
}
浮动M[4][3]={
0, 0, 0,
0, 1, 1,
1, 0, 1,
1, 1, 0
};
int main()
{
浮动*p=&M[0][0];
foo&p;
}
但是这段代码很难看而且容易出错,如果可能的话,请遵循Luchian的建议并更正声明。好的,以前最好的:
float **M = new float*[4];
for(int i=0; i<4; i++){
M[i] = new float[3];
for(int j=0; j<3; j++){
M[i][j] = something...
}
}
float**M=新的float*[4];
对于(inti=0;iSee@juanma2268:一般经验法则),如果您需要一个cast来编译某些内容,那么它通常(并非总是!)是错误的,并且您的cast隐藏了一个问题。我认为这里就是这种情况。
float **M = new float*[4];
for(int i=0; i<4; i++){
M[i] = new float[3];
for(int j=0; j<3; j++){
M[i][j] = something...
}
}