c - 关于返回指针的函数的问题
问题描述
我正在尝试了解一些分发代码
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 已经在评论中指出了这一点:*
不是应用于函数原型的运算符,而是指指针返回类型。
该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';
推荐阅读
- typescript - TypeScript 不会缩小非文字类型
- node.js - 为什么我们将 connect-mongo 与 express-session、passport 和 express 一起使用?
- r - 使用 R magick 包将 if_else 传递给覆盖图像
- node.js - 使用多个本地策略时的会话问题passportjs
- python - 使用 Opemtelemetry 跟踪,根据跟踪 id“显式”创建子跨度的最佳方法是什么?
- python - 在 python 中构建单元测试
- javascript - 如何在Vue中更改子组件数据?
- c++ - 如何在伺服电机收到任何传感器的信号后停止一段时间?
- python - 使用具有不完全 LU 分解的 BIConjugate Gradient 作为预处理器
- jenkins - Groovy metaClass 在 jenkins 管道中的 .jenkinsfile 中不起作用