我的C程序操作已停止
我编写并运行这段代码来练习基本算法。但此程序操作已停止。有什么问题我的C程序操作已停止,c,C,我编写并运行这段代码来练习基本算法。但此程序操作已停止。有什么问题 #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*)
#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;
}
#包括
#包括
int bans(常数无效*a,常数无效*b){
返回(*(int*)a-*(int*)b);
}
int main()
{
int m,i;
int*arr;
scanf(“%d”、&m);
arr=(int*)malloc(sizeof(int)*m);
对于(i=0;i
scanf
需要指向arr[i]
的指针:arr+i
就足够了sizeof(arr)
实际上是sizeof(int*)
。使用m
表示元素的数量。您正在使用的习惯用法仅适用于数组类型,而不是指针类型主要的问题在声明中
scanf("%d", arr[i]);
其中,arr[i]
的类型为int
。您需要传递一个指向type(int
)的指针,如
scanf("%d", &arr[i]);
或
启用最高级别的编译器警告,编译器应警告您预期的类型不匹配
之后呢,在这个案例中,
int n = sizeof(arr)/sizeof(arr[0]);
错误,因为sizeof(arr)
与sizeof(int*)
相同。你根本不需要一个新的变量。使用m
scanf(“%d”,arr[i])代码>-->scanf(“%d”和&arr[i])代码>或scanf(“%d”,arr+i)代码>,使用m
代替n
。请阅读Eric Lippert的文章。
int n = sizeof(arr)/sizeof(arr[0]);