1

これらの署名の違いは何ですか?


T * f(T & identifier);
T & f(T & identifier);
T f(T & identifier);

void f(T * identifier); void f(T & identifier); void f(T identifier);

私は c でポインタに出会いましたが、関数シグネチャのアンパスタンドは私にとって新しいものです。誰でもこれを説明できますか?

4

2 に答える 2

2

型宣言のアンパサンドは、参照型を示します。

int i = 4;
int& refi = i;  // reference to i
int* ptri = &i; // pointer to i

refi = 6;  // modifies original 'i', no explicit dereferencing necessary
*ptri = 6; // modifies through the pointer

参照はポインターと多くの類似点がありますが、アドレス演算が必要ない場合は使いやすく、エラーが発生しにくくなります。また、ポインターとは異なり、参照は、初期化後に別のオブジェクトを「指す」ように再バインドすることはできません。C ++での参照とポインタについてGoogleに尋ねるだけです。

于 2010-04-05T12:37:48.747 に答える
1

T * f(T & identifier);
これは、T への参照を受け取り、T へのポインターを返す関数です。

T & f(T & identifier);
これは、T への参照を受け取り、T への参照を返す関数です。

T f(T & identifier);
これは T への参照を取り、T のコピーを返します。

void f(T * identifier);
これは T へのポインターを取り、何も返しません。

void f(T & identifier);
これは T への参照を取り、何も返しません。

void f(T identifier);
これは T を値 (コピー) で受け取り、何も返しません。

参照はポインタとほぼ同じように動作しますが、参照が NULL に設定されることはなく、参照は暗黙的に作成および逆参照されるため、関数の呼び出し中または関数内でポインタ構文を扱う必要はありません。

于 2010-04-05T12:37:58.917 に答える