Приведение статической матрицы к указателю - PullRequest
1 голос
/ 12 января 2012

У меня есть матрица М:

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 )

Но когда я выполнил это, я получил ошибку сегмента. Что случилось? Я использую g ++ в Ubuntu Oneiric.

Заранее спасибо.


Хорошо, спасибо Лучиану, но как насчет использования:

float **M = new float*[4];
M[0] = {0,0,0};

Я знаю, что он не компилируется, но там что-то похожее?

Ответы [ 2 ]

0 голосов
/ 14 января 2012

Хорошо, старое лучшее:

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...
    }
}
0 голосов
/ 12 января 2012

Если вы хотите (или должны) выполнить арифметику самостоятельно, избегайте приведения:

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

Но этот код уродлив и подвержен ошибкам, если возможно, следуйте советам Лучиана и исправьте объявление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...