Почему я не могу распечатать 2-D массив в формате array [] []? - PullRequest
0 голосов
/ 10 февраля 2020

Я сейчас практикую свою программу C и хочу вычислить две двумерные матрицы.

Но я запутываюсь, когда использую printf() для проверки этих массивов. Они ломают программу.

Код, как показано ниже:

int matric_multi_main()
{
    int m1_row = 0;
    int m1_col = 0;
    int m2_row = 0;
    int m2_col = 0;
    int **matric1;
    int **matric2;

    printf("Please enter Matric 1 row: ");
    scanf("%d", &m1_row);
    printf("Please enter Matric 1 column: ");
    scanf("%d", &m1_col);
    printf("Please enter Matric 2 row: ");
    scanf("%d", &m2_row);
    printf("Please enter Matric 2 column: ");
    scanf("%d", &m2_col);

    if (m1_col != m2_row)
    {
        printf("Error matric size!!!\n");

        return 0;
    }

    /* Allovate memory for matric 1 */
    matric1 = malloc(m1_row * sizeof(int *));
    for (int i = 0; i < m1_row; i++)
    {
        matric1[i] = malloc(m1_col * sizeof(int));
    }

    /* Allovate memory for matric 2 */
    matric2 = malloc(m2_row * sizeof(int *));
    for (int i = 0; i < m2_row; i++)
    {
        matric2[i] = malloc(m2_col * sizeof(int));
    }

    /* Init matric 1 */
    for (int i = 0; i < m1_row; i++)
    {
        for (int j = 0; j < m1_col; j++)
        {
            printf("[%d, %d] = ", i, j);
            scanf("%d", matric1+i*m1_row+j);
        }
    }

    /* Init matric 2 */
    for (int i = 0; i < m2_row; i++)
    {
        for (int j = 0; j < m2_col; j++)
        {
            printf("[%d, %d] = ", i, j);
            scanf("%d", matric2+i*m2_row+j);
        }
    }

    for (int i = 0; i < m1_row; i++)
    {
        printf("[");
        for (int j = 0; j < m1_col; j++)
        {
            //printf("%d ", *(matric1 + i*m1_row + j));  <- correctly
            //printf("%d ", &matric1[i][j]);  <-- display the data with wrong order
            printf("%d ", matric1[j][i]); <- break the program
        }
        printf("]\n");
    }

    for (int i = 0; i < m2_row; i++)
    {
        printf("[");
        for (int j = 0; j < m2_col; j++)
        {
            //printf("%d ", *(matric2 + i*m2_row + j));
            printf("%d ", matric2[i][j]);
        }
        printf("]\n");
    }
}

Я думаю, что могу использовать matric1[i][j] для непосредственного получения правильных данных.

Но пример на сайт всегда использует array[][] напрямую.

Я могу понять разницу между моей программой и примером.

...