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

时间:2020-11-12 08:05:52

标签: c pointers struct

我是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指针和指向一个学生的指针

3 个答案:

答案 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;