关于 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';
我正在尝试了解一些分发代码
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';