【问题标题】:Static Matrix Casting to a pointer静态矩阵转换为指针
【发布时间】:2012-01-15 00:09:11
【问题描述】:

我有矩阵 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};

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

【问题讨论】:

  • @juanma2268:一般的经验法则,如果你需要一个演员来编译,那么它经常(并不总是!)错误并且你的演员隐藏了一个问题。我认为这里就是这种情况。

标签: c++ matrix


【解决方案1】:

如果您想(或需要)自己做算术,请避免使用演员表:

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 的建议并更正声明。

【讨论】:

    【解决方案2】:

    好的,旧的最好的:

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

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2016-08-07
      • 2014-08-15
      • 2015-12-22
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多