Я сейчас практикую свою программу 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[][]
напрямую.
Я могу понять разницу между моей программой и примером.