结构返回功能

时间:2012-05-14 19:06:18

标签: c

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

struct S {
   int a, b;
} x;

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

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

睁开眼睛看这些家伙。

3 个答案:

答案 0 :(得分:2)

这只是一个恰好返回struct的函数。没有什么比这更重要了。看到一个函数返回一个int你会不会感到惊讶,为什么一个人返回一个结构会感到惊讶?

另外,extern在这里是多余的,因为这是函数的默认存储类。

答案 1 :(得分: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进行前向声明(这通常在头文件中完成),以便其他函数知道其原型,即其参数和返回类型,即使函数本身在另一个函数中定义文件。

答案 2 :(得分:0)

如果你得到一个struct的副本而不是指向它的指针,你知道你永远不必担心free()它,或者是否有任何数据争用,其中一个线程写入结构而另一个从中读取,或者该函数返回的指针是否会因某些可能超出您控制范围的操作而失效。