改好了,能运行了,但不明白为何
&(*p[i]).b 不行,要写成 &(*p)[i].b 呢?
&(*p[i]).b 不行,要写成 &(*p)[i].b 呢?

老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!

程序代码:# include <stdio.h>
# include <malloc.h>
//函数前置声明
void InputStudent(struct Student * p, int len);
void OutputStudent(struct Student * p, int len);
void Sort(struct Student * p, int len);
//结构体,构建学生结构体
struct Student
{
int a;
float b;
char c[10];
};
//主函数
int main(void)
{
struct Student * p;
int len;
printf("请输入学生的人数:");
scanf("%d", &len);
p = (struct Student *) malloc (len * sizeof(struct Student));
//输入
InputStudent(p, len);
//冒泡排序
Sort(p, len);
//输出
OutputStudent(p, len);
return 0;
}
//输入函数
void InputStudent(struct Student * p, int len)
{
int i;
for(i=0; i<len; i++)
{
printf("请输入第 %d 个学生的信息:\n", i+1);
printf("年龄:");
scanf("%d", &p[i].a);
printf("成绩:");
scanf("%f", &p[i].b);
printf("姓名:");
scanf("%s", p[i].c);
}
return;
}
//输出函数
void OutputStudent(struct Student * p, int len)
{
int i;
printf("\n\n学生信息如下:\n");
for(i=0; i<len; i++)
{
printf("第 %d 个学生的信息:\n", i+1);
printf("年龄: %d ", p[i].a);
printf("成绩: %f ", p[i].b);
printf("姓名: %s \n", p[i].c);
}
return;
}
//冒泡排序函数
void Sort(struct Student * p, int len)
{
int i, j;
struct Student t;
for(i=0; i<len-1; i++)
{
for(j=0; j<len-1-i; j++)
{
if(p[j].b < p[j+1].b)
{
t = p[j];
p[j] = p[j+1];
p[j+1] = t;
}
}
}
}