6

このコードを考えてみましょう:

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

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

struct s適切なサイズの場合、最初の形式を選択する必要がありますか?

4

3 に答える 3

6

あなたはどちらが良いか尋ねていますか?

それはあなたが何をしようとしているのかによります-ポインタを使った2番目の形式の方が効率的です。ただし、値を渡すだけで副作用を心配する必要がない場合は、が大きすぎないf限り、最初の署名を使用できます。struct

于 2012-10-16T19:08:34.717 に答える
4

これを読むことをお勧めします。

が適切なサイズである場合struct s、特に再帰関数では、値で渡すことは避けてください。

構造体を値で渡すということは、関数呼び出しの前に構造体がコピーされることを意味します。その結果、実行速度が低下し、メモリ使用率が高くなります。また、structはスタックに割り当てられることに注意してください。一部のシステムでは、スタックサイズがかなり制限されています。

関数によって変更される構造の複数のコピーが必要であり、それらの変更が各関数のスコープ内でのみ表示されることを望まない場合を除いて、すべての場合にポインターを使用することをお勧めします。

于 2012-10-16T19:16:28.730 に答える
-2

へのポインタの代わりにのfコピーを取得する場合は、最初の形式をお勧めします。xconstx

于 2012-10-16T19:10:01.363 に答える