我遇到了一个问题,我以这种方式声明了一个函数:
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();
我加入*后,一切都很好。我不知道为什么它会修复它,为什么你会这样做。你只在返回结构指针时这样做吗?或者还有其他情况你想这样做吗?感谢。
答案 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”。他们是不同的东西。您似乎认为编译器可以猜测或知道哪个是错误,也许认为人总是通过指针返回结构,但这不是真的,编译器确实无法确定,所以它可以做的最好的事情确保程序按预期工作是坚持你 - 程序员 - 返回代码并使其保持一致。