このコードを考えてみましょう:
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
適切なサイズの場合、最初の形式を選択する必要がありますか?
あなたはどちらが良いか尋ねていますか?
それはあなたが何をしようとしているのかによります-ポインタを使った2番目の形式の方が効率的です。ただし、値を渡すだけで副作用を心配する必要がない場合は、が大きすぎないf
限り、最初の署名を使用できます。struct
これを読むことをお勧めします。
が適切なサイズである場合struct s
、特に再帰関数では、値で渡すことは避けてください。
構造体を値で渡すということは、関数呼び出しの前に構造体がコピーされることを意味します。その結果、実行速度が低下し、メモリ使用率が高くなります。また、struct
はスタックに割り当てられることに注意してください。一部のシステムでは、スタックサイズがかなり制限されています。
関数によって変更される構造の複数のコピーが必要であり、それらの変更が各関数のスコープ内でのみ表示されることを望まない場合を除いて、すべての場合にポインターを使用することをお勧めします。
へのポインタの代わりにのf
コピーを取得する場合は、最初の形式をお勧めします。x
const
x