calloc函数的使用

Rookiekk 2017-03-13 05:50:59
fun()函数的功能:对N名学生成绩从高到低排名找出前m名了。并将数据反正一个动态分配的连续存储区中,此存储区首地址作为函数值返回。
typedefine struct ss{
char num[10];
int s;
}STU;
STU *fun(STU a[ ],int m)
{
STU b[N],*t;
int i,j,k;

t=(STU *)calloc(m,sizeof(STU));
for(i=0;i<N;i++)
b[i]=a[i];
for(k=0;k<m;k++)
{
for(i=j=0;i<N;i++)
if(b[i].s>b[j].s)
j=i;
t[k].num=b[j].num; //答案说是t[k]=b[j]
t[k].s=b[j].s;b[j].s=0;
}
}
有两个问题,1.这个程序有错误,正如注释那里,他那部的操作我感觉不对啊,求大神解释
2.calloc() 这个函数分配的地址可以用 t[0],t[1].....t[k],这样来表示这个地址的每一块?这是怎么解释的?求大神讲解
...全文
266 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-03-13
  • 打赏
  • 举报
回复
第一个问题,结构体可以直接赋值,即t[k] = b[j];也可以分别赋值,但是对于字符数组num的赋值不能直接t[k].num = b[j].num; 需要借助字符串函数strncpy,既然结构体可以直接赋值,所以不用将结构体里的成员一一拷贝; 第二个问题,t[0],t[1]是可以,因为数组和指针可以互相用。即t[0] == *(t+0), t[1]就是*(t+1); 结构体你直接看成普通类型变量的操作即可,很多操作都是相近的,赋值,指针运用,数组运用。
paschen 2017-03-13
  • 打赏
  • 举报
回复
t[k].num=b[j].num; 只是赋值num成员 t[k]=b[j] 是赋值整个对象 t[n] 等价于 *(t+n)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧