在C中,如果一个struct有多个元素并且你想在函数中只使用其中的一些元素,那么将指针传递给struct还是应该自己传递元素呢?或者它没有什么区别?
如果我有,例如:
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);
答案 0 :(得分:4)
有一点不同。传递单个struct元素将为每个值分配内存,因为您传递的是值,而不是通过引用。传递结构指针只需要内存来分配地址。
哪个看起来更好?这是主观的,没有正确的答案。
答案 1 :(得分:1)
如果该函数旨在处理结构,那么当然最好将它声明为:
void f(struct Test*);
或
void f(struct Test);
取决于是否应在函数中更改原始参数。
另一方面,如果函数被设计为处理大约四个整数值,那么最好像这样声明它:
void f(int *, int *, int *, int *);
或
void f(int, int, int, int);
再次取决于如何在函数中处理参数。
答案 2 :(得分:1)
看看你的例子,差异确实可以忽略不计。在某种程度上,它就像传递一个整数值对四个整数值。在你的情况下,我宁愿使用
void f(const struct Test*);
当您决定对功能进行更改时,它将提供更好的可维护性。此外,它还可以防止您对结构进行意外更改。