为什么要对返回结构指针的函数进行'*'?
Why put a '*' on functions that return a struct pointer?
我遇到了一个问题,我这样声明一个函数:
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。这通常不是一个好主意(如果必须的话,使用引用或指针)。因此,您需要使用&
作为引用或*
作为指针,否则它将期望您按值返回它。
底线似乎是你的代码不一致-在声明直接返回结构的函数中说"返回指针到结构变量"。它们是不同的东西。你似乎认为编译器可以猜测或知道哪个是错误的,也许认为人们总是通过指针返回结构,但这不是真的,编译器确实不能确定,所以它能做的最好的事情是确保程序按预期工作,坚持你-程序员-返回代码并使其一致。
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量