gpt4 book ai didi

c - 努力让前 K 学生回归

转载 作者:行者123 更新时间:2023-11-30 20:23:37 26 4
gpt4 key购买 nike

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;
}

代码中没有构建错误,但我获取的是地址而不是值

最佳答案

通过让你的函数返回一个指向指针的指针,你会得到太多的间接层:你返回本地指针的地址,但指针在返回后超出范围,使该地址无效。

这里的解决方案是直接返回句柄:

struct student *topKStudents(struct student *students, int len, int K)
{
student* top_students = malloc(K * sizeof(*top_students));

// fill array

return top_students;
}

这种设计意味着调用代码必须稍后释放返回的指针。另一种可能的设计是传入一个数组并让调用代码负责分配:

int topKStudents(struct student *res, int K,
const struct student *students, int len)
{
// fill res

return 0;
}

返回值可以是成功值,例如0 表示成功,-1 表示失败,或者它可以返回填充结果数组的大小,根据您的函数,该大小可能小于 K

这种设计允许您在堆栈上分配结果数组,如果 K 很小,这是一个不错的选择。

(这个答案实际上解决了如何从函数返回数组的问题。它没有处理手头的问题。您返回顶尖学生的代码只是对原始数组进行排序,这意味着您不确实必须返回一个数组:修改数组后,成绩最好的学生位于 K 前面的位置。)

关于c - 努力让前 K 学生回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com