6

考虑这段代码:

struct s { /* ... */ };

void f(struct s x) { /* ... */) /* (1) */
/* or */
void f(const struct s *x) { /* ... */ } /* (2) */

什么时候struct s有合适的尺寸,在哪种情况下我们应该更喜欢第一种形式?

4

3 回答 3

6

你问哪个更好?

这取决于您要做什么 - 带有指针的第二种形式会更有效。但是,如果您只想传递一个值f而不必担心副作用,那么您可能会使用第一个签名——只要struct不是太大。

于 2012-10-16T19:08:34.717 回答
4

我建议阅读这个

正如您所说,当struct s大小合适时,您应该避免按值传递它,尤其是在递归函数中。

按值传递结构意味着它在函数调用之前被复制。这会导致执行速度变慢,内存利用率更高。另请注意,将struct在堆栈中分配,并且在某些系统中,堆栈大小非常有限。

我建议在每种情况下都使用指针,除非您需要由函数修改结构的多个副本,并且您不希望这些修改仅在每个函数的范围内可见。

于 2012-10-16T19:16:28.730 回答
-2

f当您想要获取 的副本x而不是指向 的const指针时,首选第一种形式x

于 2012-10-16T19:10:01.363 回答