求教一下函数问题

C_way 2011-08-25 11:25:33
#include <stdio.h>
#include <malloc.h>



struct student
{
char name[100];
float score;
};

int main(void)
{
int len;
int i, j;
struct student * parr;
struct student t;


printf("请输入学生人数 len = ");
scanf("%d", &len);
printf("\n");

parr = (struct student *)malloc(len * sizeof(struct student));

for (i=0; i<len; ++i)
{
printf("请输入第%d个学生信息\n", i+1);

printf("name = ");
scanf("%s", parr[i].name);

printf("score = ");
scanf("%f", &parr[i].score);
printf("\n\n");
}


for (i=0; i<len; ++i)
for (j=0; j<len-1-i; ++j)
{
if (parr[j].score > parr[j+1].score)
{
t = parr[j];
parr[j] = parr[j+1];
parr[j+1] = t;
}
}


return 0;
}





这段要写成函数应该发送哪两个参数,最好能写详细点给我参考下
for (i=0; i<len; ++i)
for (j=0; j<len-1-i; ++j)
{
if (parr[j].score > parr[j+1].score)
{
t = parr[j];
parr[j] = parr[j+1];
parr[j+1] = t;
}
}
...全文
153 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jernymy 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dengqibin 的回复:]
void FunName(struct student *& p,int len)具体细节自己处理
[/Quote]

或者

void FunName(struct student **amp; p,int len)
{

}

FunName(&parr, len);

C_way 2011-08-25
  • 打赏
  • 举报
回复
前辈们,能不能帮我将调用函数那块给我写出来,还有主函数调用函数那里。
我已经试过了,但很久搞不定,拜托了。
jijididi 2011-08-25
  • 打赏
  • 举报
回复
*& p就相当于P本身啊,&p是取p的地址,*&p值得就是p本身的值。
C_way 2011-08-25
  • 打赏
  • 举报
回复
strucestudent student *& p这里不是要获得实参的地址吗,干嘛还要加&呢?
dengqibin 2011-08-25
  • 打赏
  • 举报
回复
void FunName(struct student *& p,int len)具体细节自己处理
luckyyulin 2011-08-25
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>

struct student
{
char name[100];
float score;
};

struct student *sort(struct student * parr,int len);

int main(void)
{
int len;
int i;
struct student * parr;

printf("请输入学生人数 len = ");
scanf("%d", &len);
printf("\n");

parr = (struct student *)malloc(len * sizeof(struct student));

for (i=0; i<len; ++i)
{
printf("请输入第%d个学生信息\n", i+1);

printf("name = ");
scanf("%s", parr[i].name);

printf("score = ");
scanf("%f", &parr[i].score);
printf("\n\n");
}

printf("************\n");
printf("**排序之前**\n");
printf("************\n");
printf("姓名 分数\n");
for(i=0;i<len;i++)
{
printf("%-10s%.0f\n",parr[i].name,parr[i].score);
}

parr=sort(parr,len);

printf("************\n");
printf("**排序之后**\n");
printf("************\n");

for(i=0;i<len;i++)
{
printf("%s %.0f\n",parr[i].name,parr[i].score);
}

return 0;
}

struct student *sort(struct student * parr,int len)
{
int i, j;
struct student t;

for (i=0; i<len; ++i)
for (j=0; j<len-1-i; ++j)
{
if (parr[j].score > parr[j+1].score)
{
t = parr[j];
parr[j] = parr[j+1];
parr[j+1] = t;
}
}

return parr;
}


struct student *sort(struct student * parr,int len)中参数struct student * parr,int len
赵4老师 2011-08-25
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
lightrat2009 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xin_wu_hen 的回复:]
parr本身就是一个指针变量,可以不用二级指针
[/Quote]同意!
void FunName(struct student *amp; p,int len)
{

}

FunName(parr, len); /*此处的parr本身就是指针!调用2级指针岂不是多此一举啊*/

还有楼主写的是排列学生成绩的程序吗,用完parr,记得要
free(parr);
C_way 2011-08-25
  • 打赏
  • 举报
回复
6L求解答
xin_wu_hen 2011-08-25
  • 打赏
  • 举报
回复
parr本身就是一个指针变量,可以不用二级指针

69,373

社区成员

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

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