首页 > 解决方案 > 关于返回指针的函数的问题

问题描述

我正在尝试了解一些分发代码

typedef struct person
{
    struct person *parents[2];
    char alleles[2];
}
person;

person *create_family(int generations);

int main(void)
{
    person *p = create_family(GENERATIONS);
}

为什么我们必须将星号运算符放在我们的原型中。是否总是需要在原型中包含星号运算符?

标签: ccs50

解决方案


@Barmar 已经在评论中指出了这一点:*不是应用于函数原型的运算符,而是指指针返回类型。

create_family(int generations)函数正在返回 aperson*或换句话说,指向 a 的*指针struct person

你也可以这样写:

person* create_family(int generations);

或者像这样:

person * create_family(int generations);

这类似于向person结构声明指针变量,这*是变量类型声明的一部分。

person *johnDoe = NULL;

另一方面,*不同上下文中的符号也用作解引用运算符。这是相同的符号,但含义完全不同,运算符而不是类型声明的一部分。

(*johnDoe).alleles[0] = 'G';
(*johnDoe).alleles[1] = 'T';

推荐阅读