首页新闻找找看学习计划

C语言动态内存fsfs

0
悬赏园豆:160 [已解决问题] 解决于 2015-01-25 11:51

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是否在捣乱没循环一次就要打印?号这里又出现了不等于一是啥意思,这里还没有打印数组,只是输入为何要释放内存

以梦为马456的主页 以梦为马456 | 初学一级 | 园豆:58
提问于:2015-01-12 21:20
< >
分享
最佳答案
0

楼主写得好乱。。。。

关于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

收获园豆:120
tolimit | 菜鸟二级 |园豆:329 | 2015-01-20 14:55
其他回答(1)
1

return *pa>*pb ? 1: *pa<*pb ? -1:0;

指针pa的值大于指针pb 就返回1  

否则 指针pa小于指针pb 就返回-1

相等就返回0

收获园豆:40
流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 09:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册