C++ 指向指针的静态矩阵转换

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};

我有矩阵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};
我知道它不会编译,但它有类似的功能吗?

如果您想(或需要)自己进行算术运算,请避免使用强制转换:

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...
    }
}