考虑以下代码:
struct s { /* ... */ };
void f(struct s x) { /* ... */) /* (1) */
/* or */
void f(const struct s *x) { /* ... */ } /* (2) */
当struct s
的大小较大时,我们应该在什么情况下选择第一种形式?
考虑以下代码:
struct s { /* ... */ };
void f(struct s x) { /* ... */) /* (1) */
/* or */
void f(const struct s *x) { /* ... */ } /* (2) */
当struct s
的大小较大时,我们应该在什么情况下选择第一种形式?
你是在问哪个更好吗?
这取决于你想要做什么 - 用指针的第二种形式会更有效率。但如果你只是想将一个值传递给f
,而不必担心副作用,那么你可能会选择第一种形式 - 只要struct
不太大。
struct s
足够大时,尤其是在递归函数中,应避免通过值传递它。struct
将在堆栈中分配,在某些系统中,堆栈大小非常有限。当您想让f
获得x
的副本而不是x
的const
指针时,请使用第一种形式。