在C组件选择中,结构返回函数有什么好处?例如:
struct S {
int a, b;
} x;
为什么我可以将上述结构分配为如下所示的函数,这样做有什么好处吗?
extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */
睁大眼睛看看这些家伙。
在C组件选择中,结构返回函数有什么好处?例如:
struct S {
int a, b;
} x;
为什么我可以将上述结构分配为如下所示的函数,这样做有什么好处吗?
extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */
睁大眼睛看看这些家伙。
它只是一个碰巧返回 a 的函数struct
。没有什么比这更重要的了。看到一个函数返回一个你不会感到惊讶int
,为什么当一个返回一个结构时会感到惊讶呢?
顺便说一句,extern
这里是多余的,因为这是函数的默认存储类。
它很有用,因此您可以从函数返回多个值。
例如,您可以像这样使用它
struct Point {
int x;
int y;
};
struct Point getMousePos()
{
struct Point pos;
pos.x = 567;
pos.y = 343;
return pos;
}
int main()
{
struct Point mouse_pos = getMousePos();
printf("Mousepos %d,%d\n", mouse_pos.x, mouse_pos.y");
}
函数可以前向声明extern
(这通常在头文件中完成),以便其他函数知道它的原型,即它的参数和返回类型,即使函数本身是在另一个文件中定义的。
如果你得到一个结构的副本而不是指向它的指针,你知道你永远不必担心free()
它,或者是否存在任何数据竞争,即一个线程正在写入结构而另一个线程从它读取,或者是否函数返回的指针将因您可能无法控制的某些操作而失效。