1

C组件选择中,结构返回函数有什么好处?例如:

struct S {
   int a, b;
} x;

为什么我可以将上述结构分配为如下所示的函数,这样做有什么好处吗?

extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */

睁大眼睛看看这些家伙。

4

3 回答 3

2

它只是一个碰巧返回 a 的函数struct。没有什么比这更重要的了。看到一个函数返回一个你不会感到惊讶int,为什么当一个返回一个结构时会感到惊讶呢?

顺便说一句,extern这里是多余的,因为这是函数的默认存储类。

于 2012-05-14T19:09:03.800 回答
2

它很有用,因此您可以从函数返回多个值。

例如,您可以像这样使用它

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(这通常在头文件中完成),以便其他函数知道它的原型,即它的参数和返回类型,即使函数本身是在另一个文件中定义的。

于 2012-05-14T19:13:17.277 回答
0

如果你得到一个结构的副本而不是指向它的指针,你知道你永远不必担心free()它,或者是否存在任何数据竞争,即一个线程正在写入结构而另一个线程从它读取,或者是否函数返回的指针将因您可能无法控制的某些操作而失效。

于 2012-05-14T19:10:16.960 回答