静态矩阵投射到指针

Static Matrix Casting to a pointer

本文关键字:指针 静态      更新时间:2023-10-16

我有矩阵M:

float M[4][3] = {
    0, 0, 0,
    0, 1, 1,
    1, 0, 1,
    1, 1, 0};

我需要使用方法"foo"来铸造M:

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

我知道它不编译,但有类似的东西吗?

如果您想(或需要)自己执行arith,请避免强制转换:

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的建议并更正声明,这段代码很难看,而且容易出错。

好的,旧的最好的:

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