Указатель на матрицу в c - PullRequest
       4

Указатель на матрицу в c

2 голосов
/ 05 января 2012

в моем приложении c у меня есть typedef:

typedef double mat[2][2];

это мое объявление функции:

aaa(mat bbb, mat ccc, mat * ddd)

в моем коде я хочу вычислить сумму каждого членаматематика и записать результат в DDD.Я сделал это через циклы, и это главная строка:

*ddd[i][j] = bbb[i][j] + ccc[i][j];

но я получаю неправильный результат в DDD.когда я удаляю указатель из ddd, я получаю правильный результат, но, поскольку я хочу вернуть его пользователю по указателю, мне нужна ваша помощь.

что не так в моем коде?

Ответы [ 4 ]

3 голосов
/ 05 января 2012

Вы пишете не по адресу. Должно быть:

(*ddd)[i][j] = bbb[i][j] + ccc[i][j];

или просто измените прототип на

aaa(mat bbb, mat ccc, mat ddd)

так как массивы все равно распадаются на указатели. ddd будет копией, но адрес, на который она указывает, будет таким же, как и оригинал.

1 голос
/ 05 января 2012

В C массивы, используемые в качестве аргументов функции, распадаются на указатели на первый член массива и, следовательно, уже передаются по ссылке.Так что в вашем случае нет необходимости передавать явный указатель на массив, так как преобразование указателя уже происходит в процессе компиляции C-компилятором.

1 голос
/ 05 января 2012

Передача массива аналогична передаче адреса первого члена. Поскольку ваш тип является массивом, вам не нужно * в определении функции.

Do:

aaa(mat bbb, mat ccc, mat ddd)
{
    // whatever
    ddd[i][j] = bbb[i][j] + ccc[i][j];
    // whatever else
}

А ты хорош

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

[] имеет более высокий приоритет, чем *, вам следует использовать круглые скобки.

(*ddd)[i][j] = bbb[i][j] + ccc[i][j];

Передача ddd в качестве указателя не требуется.

aaa(mat bbb, mat ccc, mat  ddd)

ddd[i][j] = bbb[i][j] + ccc[i][j];

ddd уже является указателемматрица и приведенный выше код будут работать нормально.

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