关于 return 指针的函数的问题

Questions about functions that return pointers

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

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

person *create_family(int generations);

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

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

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

create_family(int generations) 函数是 returning 一个 person* 或换句话说一个指向 struct person.[=22= 的指针 * ]

你也可以这样写:

person* create_family(int generations);

或者像这样:

person * create_family(int generations);

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

person *johnDoe = NULL;

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

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