c语言 - 如何从函数返回 NULL 指针和指向结构数组元素的指针?



我是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]定义的,这意味着其中的每个元素都是Student类型。如果你把它定义为Students *student[32],那么它的每一个元素都会Student*,但这可能不是你需要的。

现在指针(Student*)可以指向某个值。它也可以不指向任何内容,在这种情况下它是 NULL。

另一方面,一个值(Student)总是存在的。它不能为空。

让我们看一下您的阵列。假设您发现成绩最高的学生处于数组中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;

最新更新