传递结构与单个结构元素

Pass struct vs individual struct elements

在 C 中,如果一个结构有多个元素,而您只想在一个函数中使用其中的一些元素,那么传递一个指向结构的指针更好还是我应该传递元素本身更好?还是没有区别?

如果我有,例如:

struct Test {
    int a1, a2, a3, a4, a5, a6, a7, a8;
};

和一个使用 a1、a2、a3、a4 的函数,我应该使用

void f(struct Test*);

void f(int, int, int, int);

有点不同。传递单个结构元素将为每个值分配内存,因为您是按值传递,而不是按引用传递。传递一个struct指针只需要内存分配一个地址。

哪个更好看?这是主观的,没有正确答案。

如果函数是为了处理结构体而设计的,那么当然最好这样声明:

void f(struct Test*);

void f(struct Test);

取决于是否应在函数中更改原始参数。

另一方面,如果函数设计用于处理一些四个整数值,那么最好像这样声明它:

void f(int *, int *, int *, int *);

void f(int, int, int, int);

再次取决于参数在函数中的处理方式。

看看你的例子,差异确实可以忽略不计。在某种程度上,这就像将一个整数值传递给四个整数值。在你的情况下,我宁愿使用

void f(const struct Test*);

当您决定对您的功能进行更改时,它将提供更好的可维护性。此外,它还可以防止意外更改结构。