我是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;