【发布时间】:2016-03-06 17:07:26
【问题描述】:
struct student ** topKStudents(struct student *students, int len, int K) {
student* top_students = (struct student *)(malloc(K * sizeof(struct student)));
struct student temp;
int i;
for (i = 0; i < len - 1; i++){
for (int j = 0; j < len - 1; j++)
if (students[j + 1].score>students[j].score){
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
for (i = 0; i < K; i++){
top_students[i] = students[i];
}
return &top_students;
}
代码中没有构建错误,但我得到的是地址而不是值
【问题讨论】:
-
好吧,一方面,您返回的是局部变量的地址。该地址在调用返回后立即无效,因此永远无法正确使用。了解当函数返回时变量
top_students消失了。我建议返回它的值而不是它的地址。 -
你可以从一些更简单的东西开始避免很多工作:一个返回前两个学生的函数。