Как создать нулевую матрицу и показать ее на экране? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь создать нулевую матрицу с помощью метода нулей ();а затем показать его на экране.Ничего не отображается.

double * zeros(int m,int n){
    double matrix[3][3] ={0};
    return matrix;
}

void printMatrice(int row,int column, double matrix [3][3]) {
     for (row=0; row<3; row++)
     {
        for(column=0; column<4; column++)
            {printf("%f     ", matrix[row][column]);}
            printf("\n");
     }
}


MAIN:

int main () {

    printMatrice(3,3,zeros(3,3));

   return 0;
}

Показать это на экране:

Процесс возвращен -1073741819 (0xC0000005)

Это предупреждения

метода printMatrice():

- предупреждение: передача аргумента 3 'printMatrice' из несовместимого типа указателя [-Wincompatible-pointer-types] |

метода нулей ():

- предупреждение: возврат 'double (*) [3]' из функции с несовместимым типом возврата 'double *' [-Wincompatible-pointer-types]

- предупреждение: функция возвращает адрес локальной переменной[-Wreturn-местный-адр] |

1 Ответ

0 голосов
/ 11 апреля 2019

Работа с многомерными массивами в c ++ - это боль в заднице. Один из самых простых способов - использовать простой массив и вручную преобразовывать координаты в линейный индекс.

Таким образом, вам не нужно жестко связывать размеры матрицы в функции, вам не нужно выделять / освобождать память, вы можете повторно использовать и переинтерпретировать данные и т. Д. Конечно, было бы лучше инкапсулировать их в класс, но это только пример.

void reset(double matrix[], int rows, int cols, double value) {
    for (int i = 0; i < rows * cols; i++)
        matrix[i] = value;
}

void print(double matrix[], int rows, int cols) {
    for (int r = 0; r < rows; r++) {
        for (int c = 0; c < cols; c++)
            printf("%f     ", matrix[r * cols + c]);
        printf("\n");
    }
}

int main() {

    double m[3 * 3];
    reset(m, 3, 3, 0.0);
    print(m, 3, 3);

    printf("\n");

    double n[2*5];
    reset(n, 2, 5, 1.0);
    print(n, 2, 5);

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