传递结构与单个结构元素
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*);
当您决定对您的功能进行更改时,它将提供更好的可维护性。此外,它还可以防止意外更改结构。
在 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*);
当您决定对您的功能进行更改时,它将提供更好的可维护性。此外,它还可以防止意外更改结构。