我是C和整体编程的初学者。
我具有以下功能:
AutoCompleteRequest
,类型指针指向结构Student和结构数组Students* printGrades()
。假设该结构包含有关学生姓名,ID和成绩的数据。
如任务所述,它应根据特定条件返回NULL指针或指向成绩最高的一名学生的指针(我想这是一个元素,即姓名,ID,1名学生的成绩) 。假设我对数组进行了排序,以使最高学生的数据(姓名,ID,年级)位于顶部。
所以我面临的挑战是我真的不知道如何退还他们。我所做的是:
Students student[32]
我刚返回NULL或student(我需要数组中第一个学生的数据,我只返回了if (a condition) {
return NULL;
} else {
return student;
}
,因为在这种情况下,只返回第一个元素,我认为就足够了这样做,因为函数本身就是一个指针)。但是,正如我的导师说的那样,这是错误的(特别是两个return命令),他没有给我任何提示(尽管他没有教过它)。我在互联网上进行了查询,但是找不到解决方法-它们要么不合适,要么我们不允许使用复杂的方法。
那么,您能告诉我我如何返回NULL指针和指向一个学生的指针
答案 0 :(得分:2)
Student*
(指向值的指针)和Student
(值)是C中的两种不同类型。您的学生数组定义为Students student[32]
,这意味着其中的每个元素都是类型{{ 1}}。如果将其定义为Student
,则其每个元素都将是Students *student[32]
,但这可能不是您所需要的。
现在,指针(Student*
)可以指向某个值。它也可以不指向任何内容,在这种情况下为NULL。
另一方面,值(Student*
)始终存在。不能为NULL。
让我们看看您的阵列。假设您发现成绩最高的学生位于数组中的Student
位置,即i
。
从函数返回student[i]
时,将返回按值,这意味着您实际上创建了一个学生副本并将其返回。
您想要的是通过引用返回 ,即仅返回指向学生的指针,而不是真正复制其值。
为此,您可以使用运算符&。您要做的是student[i]
。
return &student[i]
答案 1 :(得分:0)
这是一个执行类似操作的小功能。它避免了一些惯用的C构造。您应该可以将其应用于问题。
/*-
struct S *NewS(void) - return a new S; null if exhausted.
*/
#define NS 100
static struct S Stab[NS];
static int sp;
struct S *NewS() {
struct S *s;
if (sp < NS) {
s = Stab + sp;
sp += 1;
} else {
s = NULL;
}
return s;
}
答案 2 :(得分:-1)
指针的值是指向或NULL
的对象的地址。
对于您的问题,只需返回学生的地址即可,例如:return &student;