试图回归顶尖K学生

时间:2016-03-06 17:07:26

标签: c arrays structure

View.getLocationOnScreen()
getLocationInWindow()

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

1 个答案:

答案 0 :(得分:1)

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

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

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

    // fill array

    return top_students;
}

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

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

    return 0;
}

返回值可以是成功值,例如0表示成功,-1表示失败,或者它可以返回filles结果数组的大小,这取决于您的函数,可能小于K

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

(这个答案真的处理了如何从函数返回数组的问题。它不处理手头的问题。返回顶级学生的代码只是对原始数组进行排序,这意味着你没有真的必须返回一个数组:修改完阵列后,顶尖学生处于K第一个位置。)