我编写并运行此代码来练习基本算法。但此程序操作已停止。有什么问题?
#include <stdio.h>
#include <stdlib.h>
int bans(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main()
{
int m, i;
int* arr;
scanf("%d", &m);
arr = (int*)malloc(sizeof(int) * m);
for (i = 0; i < m; i++) {
scanf("%d", arr[i]);
}
int n = sizeof(arr)/sizeof(arr[0]);
for (i = 0; i < n; i++) printf("%d ", arr[i]);
qsort(arr, n, sizeof(arr[0]), bans);
for (i = 0; i < n; i++) printf("%d ", arr[i]);
free(arr);
return 0;
}
答案 0 :(得分:2)
scanf
需要指针到arr[i]
:arr + i
就足够了。
sizeof(arr)
实际上是sizeof(int*)
。使用m
表示元素数量。您使用的习惯用法仅适用于数组类型,非指针类型。
答案 1 :(得分:0)
主要问题在于声明
getters = {
getLists: () => 'getLists'
}
其中 scanf("%d", arr[i]);
的类型为arr[i]
。您需要将指针传递给类型(int
),就像
int
或
scanf("%d", &arr[i]);
将编译器警告启用到最高级别,编译器应警告您预期的类型不匹配。
之后,在这种情况下,
scanf("%d", arr+i);
是错误的,因为 int n = sizeof(arr)/sizeof(arr[0]);
与sizeof(arr)
相同。根本不需要新的变量。使用sizeof (int *)
。