View.getLocationOnScreen()
getLocationInWindow()
代码中没有构建错误,但我得到的是地址而不是值
答案 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
第一个位置。)