为什么要对返回结构指针的函数进行'*'?

Why put a '*' on functions that return a struct pointer?

本文关键字:函数 返回 结构 指针 为什么      更新时间:2023-10-16

我遇到了一个问题,我这样声明一个函数:

struct my_struct get_info();

应该返回一个指向结构体的指针,然后在main中捕获该指针,如下所示:

struct my_struct *p_struct;
p_struct = get_info();

然后我得到一个编译器错误,说它不能从'my_struct *' to 'my_struct.转换我看了一下做同样事情的代码,我注意到在它们的函数原型和定义中,它们在函数名之前有一个*,比如:

struct my_struct *get_info();

在我添加了*之后,一切都很好。我不知道为什么它能修复它,也不知道你为什么要这么做。你只在返回结构指针时这样做吗?或者还有其他情况你想这么做吗?谢谢。

它应该返回一个指向结构体的指针

但是你的代码没有返回指向struct的指针。是吗?

你是说struct my_struct* get_info();吗?

struct my_struct*表示指针,就这么简单。所以当你想要返回一个指针时,返回类型也应该是一个指针,不是吗?
您可以将struct my_struct *get_info();写成struct my_struct* get_info();,这可能会更多地暗示您真正的返回类型是什么。*属于该返回类型,而不是函数本身。

您可以通过值而不是指针传递 (struct)s。这通常不是一个好主意(如果必须的话,使用引用或指针)。因此,您需要使用&作为引用或*作为指针,否则它将期望您按值返回它。

底线似乎是你的代码不一致-在声明直接返回结构的函数中说"返回指针到结构变量"。它们是不同的东西。你似乎认为编译器可以猜测或知道哪个是错误的,也许认为人们总是通过指针返回结构,但这不是真的,编译器确实不能确定,所以它能做的最好的事情是确保程序按预期工作,坚持你-程序员-返回代码并使其一致。