int
s(void const *a,void const *b)
{
register int const *pa=a;
register int const *pb=b;
return *pa>*pb ? 1: *pa<*pb ? -1:0;
}这个函数被qsort调用,请问*pa=a是*a中的a吗若不是*pa和函数怎么能扯上关系,若是有怎么理解,return语句怎么理解。
typedef struct NODE{
struct NODE *link;
int value;
}Node;
Node *new;
new=(Node*)malloc(sizeof(Node));
int *array;
array=malloc(n_values*sizeof(int));
if(array==NULL){
printf("can't get memory for that many value\n");
exit(EXIT_FAILURE);
malloc前的array为什么没用int而new却要用Node.exit是什么意思
观察数组共有多少个值
if(scanf("/d",£n_value)!=1||n_value<=0){
……}是用输入的值和一与零比较吗为何要不等于一
读取这些值
for(i=0;i<n_value;i++){
printf("?");
if(scanf("%d",array+i)!=1){
printf"error");
free(array);
printf是否在捣乱没循环一次就要打印?号这里又出现了不等于一是啥意思,这里还没有打印数组,只是输入为何要释放内存
楼主写得好乱。。。。
关于return的问题楼上已经回答了,就是那个意思。
关于malloc的问题
实际上第一个malloc函数直接写成new = malloc(sizeof(Node));也是可以的
而第二个malloc函数直接写为array=(int *)malloc(n_values*sizeof(int));也没什么问题
因为malloc返回的是一个void *指针,这个指针具体有什么特性楼主可以百度一下,指针的特性楼主也可以百度一下。
关于楼主所有的scanf
这一行代码if (scanf ("%d", &n_value) != 1 || n_value <= 0)意思就是输入成功的数量不为1或者输入的值小于等于0
其实if (scanf("%d",array+i) != 1)很好理解的,我拿scanf("%d %d", &a, &b)来解释一下,scanf函数的返回值有几种情况,一种情况就是EOF错误,返回的是-1,另一种情况就是成功输入了多少个数据,在我的例子中,你输入的是 2 3的话,scanf返回值就为2(成功输入两个数,并且赋值到了a,b中),当你输入的是 2时,scanf返回值为1(成功输入1个数,已赋值到a中)。所以在你的问题中这个if只是判断一下scanf函数输入成功的数量是不是为1
return *pa>*pb ? 1: *pa<*pb ? -1:0;
指针pa的值大于指针pb 就返回1
否则 指针pa小于指针pb 就返回-1
相等就返回0