【发布时间】:2021-01-06 12:30:32
【问题描述】:
我编写了这段代码用于对 nxn 矩阵进行排序:奇数行按降序排列,双行按升序排列,但它没有通过编译阶段。
我做错了什么?
它主要告诉我这个:从 'int *' 分配给 'int' 使指针从没有强制转换的整数(我该如何解决这个问题)?
#include <stdio.h>
#include <stdlib.h>
int comp_a(int a, int b) {
if (a < b) {
return 1;
} else {
return 0;
}
}
int comp_d(int a, int b) {
if (a > b) {
return 1;
} else {
return 0;
}
}
void sort(int a[], int n, int (*comp)(int, int)) {
int t;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1; j++) {
if (comp(a[j], a[j + 1]) == 0) {
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
int main() {
int n;
printf("Enter the dimension of matrix(n): ");
scanf("%d", &n);
int *mat = (int*)calloc(n, sizeof(int));
for (int i = 0; i < n; i++) {
mat[i] = (int*)calloc(n, sizeof(int));
}
for (int i = 0; i < n; i++) {
printf("Enter row [%d]: ", i);
for (int j = 0; j < n; j++) {
scanf("%d", &mat[i][j]);
}
}
for (int i = 0; i < n; i++) {
if (i%2 == 0) {
sort(mat[i], n, &comp_a);
} else {
sort(mat[i], n, &comp_d);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
看来你想分配
int*的数组,而不是int,所以分配它。此外,似乎应该更改比较函数或创建新的比较函数。 -
向我们展示您有疑问的编译器输出会有所帮助。但我猜是创建矩阵的线?