[英]How to return NULL pointer and a pointer to an element of an array of structures from a function?
我是 C 和编程的初学者。
我有以下函数: Students* printGrades()
,它是指向结构 Students 和结构数组Students student[32]
指针类型。 假设该结构包含有关学生姓名、ID 和成绩的数据。
正如任务所述,它应该根据特定条件返回一个 NULL 指针或一个指向最高成绩的学生的指针(我猜这意味着一个元素,即姓名、ID、1 个学生的成绩)。 假设我已经对数组进行了排序,以便最高学生的数据(姓名、ID、年级)位于顶部。
所以我面临的挑战是我真的不知道如何归还它们。 我所做的是:
if (a condition) {
return NULL;
} else {
return student;
}
我刚刚返回 NULL 或 student (我需要数组中第一个学生的数据,我只是返回student
,因为在这种情况下,只返回第一个元素,我认为这样做就足够了,因为该函数本身就是一个指针)。 但是,正如我的导师所说,这是错误的(特别是 2 个返回命令)并且他没有给我任何提示(尽管他没有教过)。 我在互联网上查了一下,但找不到这样做的方法 - 它们要么不合适,要么我们还不允许使用复杂的方法。
所以,你能告诉我我如何返回一个 NULL 指针和一个指向一个学生的指针吗?
Student*
(指向值的指针)和Student
(值)是 C 中的两种不同类型。您的Students student[32]
数组定义为Students student[32]
,这意味着其中的每个元素都是Student
类型。 如果您将其定义为Students *student[32]
,那么它的每个元素都是Student*
,但这可能不是您需要的。
现在一个指针( Student*
)可以指向某个值。 它也可以指向空,在这种情况下它是 NULL。
另一方面,值( Student
)始终存在。 它不能为 NULL。
让我们看看你的数组。 假设您发现成绩最高的学生位于数组中的位置i
,即student[i]
。
当从函数返回student[i]
,您返回的是by 值,这意味着您实际上创建了 student 的副本并返回它。
你想要的是通过引用返回,即只返回指向学生的指针,而不是真正复制它的值。
因此,为此您使用运算符 &。 你所做的是return &student[i]
。
/* Here you find the 'i' of the student with the highest grade */
if (/*a condition*/) {
return NULL;
} else {
return &student[i];
}
这是一个执行类似操作的小函数。 它避免了一些惯用的 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;
}
指针的值是它指向的对象的地址或NULL
。
对于你的问题,只需返回学生的地址,就像这样: return &student;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.