Altought,这个问题以前有很好的答案,我不能避免添加我自己的。因为我在 Collegue 学过 pascal 编程,所以我习惯这样做,用 C 相关的编程语言:
void* AnyFunction(int AnyParameter)
{
void* Result = NULL;
DoSomethingWith(Result);
return Result;
}
这有助于我轻松调试,并避免像 @ysap 提到的与指针相关的错误。
需要记住的重要一点是,问题提到要返回一个 SINGLE 指针,这是一个常见的警告,因为指针可以用于处理单个项目或连续数组!
这个问题建议使用数组作为一个概念,带有指针,而不是使用数组语法。
// returns a single pointer to an array:
student_record* answer4(student_record* student, unsigned int n)
{
// empty result variable for this function:
student_record* Result = NULL;
// the result will allocate a conceptual array, even if it is a single pointer:
student_record* Result = malloc(sizeof(student_record)*n);
// a copy of the destination result, will move for each item
student_record* dest = Result;
int i;
for(i = 0; i < n ; i++){
// copy contents, not address:
*dest = *student;
// move to next item of "Result"
dest++;
}
// the data referenced by "Result", was changed using "dest"
return Result;
} // student_record* answer4(...)
检查一下,这里没有下标运算符,因为使用指针寻址。
请不要开始帕斯卡与 c 的火焰战争,这只是一个建议。