在c中定义并返回一个结构

nev*_*ing 3 c struct return-value

我正在尝试将一些代码从Javascript转换为c.该函数创建一个数组(始终具有固定数量的项),然后返回该数组.我已经了解到,在c中返回一个数组并不简单,所以我想将它作为结构返回.我的c并不是那么好,所以我想检查在这种情况下返回结构是正确的,并且我正在以正确的方式进行.谢谢.

typedef struct {
    double x;
    double y;
    double z;
} Xyz;

Xyz xyzPlusOne(Xyz addOne) { 

    Xyz xyz;
    xyz.x = addOne.x + 1;
    xyz.y = addOne.y + 1;
    xyz.z = addOne.z + 1;

    return xyz;
}
Run Code Online (Sandbox Code Playgroud)

小智 8

这是非常好的和正确的C,但是按值传递结构对于较大的结构或者如果您打算更改调用者中的结构可能不是一个好主意:

Xyz s;
s = XyzPlusOne( s );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你最好将结构作为指针传递,并简单地说:

Xyz s;
XyzPlusOne( & s );
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你想要这样的东西:

Xyz s1, s2;
...,
s2 = XyzPlusOne( s1 );
Run Code Online (Sandbox Code Playgroud)

然后返回一个值是有道理的.