繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM