使用结构体参数与使用多个参数有何优缺点

sdg*_*sdh 4 c# parameters struct

假设我有一个函数需要一对坐标xy

myFunction(int x, int y)
{
    // Do stuff... 
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以将这些参数包装到一个Point结构中:

struct Point
{
    int x;
    int y; 
}

myFunction(Point p)
Run Code Online (Sandbox Code Playgroud)

或者甚至向程序员提供这两个选项:

myFunction(int x, int y)

myFunction(Point p)
{
    myFunction(p.x, p.y)
}
Run Code Online (Sandbox Code Playgroud)

使用结构对参数进行分组而不是单独传递参数有哪些优点和缺点?

这些权衡在编程语言之间是否有所不同?

vcR*_*obe 5

结构是首选方式!

当您有一个或两个参数(如您的示例中)时,没有太大区别,但当您有 4 个或更多参数时,区别就很明显(您必须键入更少的代码)。

如果您想将参数作为指针或引用传递,您必须键入更少的代码。

使用struct 的另一个优点是代码更容易维护。

让我们用你自己的例子来看看它的实践

想象一下,您正在创建一个 CAD 应用程序,并且在最初的想法中,程序仅在平面 (X, Y) 上工作,因此您将拥有许多使用一个或多个点作为参数的函数,如下所示:

struct point
{
  int x;
  int y;
}

func Foo1(point a) {}
func Foo2(point a, point b) {}
.
.
.
Run Code Online (Sandbox Code Playgroud)

但几个月后,应用程序设计发生了变化,现在它需要在空间(3D 世界)中工作,因此您需要将 Z 坐标添加到点中。

如果您使用的是结构体,您唯一需要做的就是将 Z 变量添加到结构体中并完成(当然,您需要更新函数中的公式),但如果您没有使用结构体,则需要将 Z 参数添加到每个使用点作为参数的函数。

func Foo1(int x, int y, int z) {}
func Foo2(int p1x, int p1y, int p1z, int p2X, int p2Y, int p2Z) {}
Run Code Online (Sandbox Code Playgroud)

您可以在这里查看更详细的解释https://en.wikipedia.org/wiki/Struct_(C_programming_language)