为什么在返回结构指针的函数上加上'*'?

时间:2011-04-20 04:26:08

标签: c++ pointers

我遇到了一个问题,我以这种方式声明了一个函数:

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();

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

4 个答案:

答案 0 :(得分:1)

  

它应该返回一个指向结构

的指针

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

您的意思是struct my_struct* get_info();吗?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以按值传递(struct)而不是指针。这通常不是一个好主意(如果必须,请使用引用或指针)。因此,您需要使用&作为参考,或者使用*作为指针,或者它会期望您按值返回它。

答案 3 :(得分:0)

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