8

プロトタイプを使用したメソッドがあります。

 bool getAssignment(const Query& query, Assignment *&result);

Assignment *&result2番目のパラメータ( )のタイプについては、以前にそのようなものを見たことがないと思うので、少し混乱しています。それは次のように使用されます:

 Assignment *a;
 if (!getAssignment(query, a))
    return false;

それはポインタへの参照ですか、それともその逆ですか?またはどちらでもない?説明をいただければ幸いです。ありがとう。

4

2 に答える 2

18

ポインタへの参照です。アイデアは、ポインタを変更できるようにすることです。他のタイプと同じです。


詳細な説明と例:

void f( char* p )
{
    p = new char[ 100 ];
}
int main()
{
    char* p_main = NULL;
    f( p_main );
    return 0;
}

p_main割り当てられたchar配列を指すように変更されません(これは明確なメモリリークです)。これは、ポインタをコピーすると、値によって渡されるためです(これは、値によって渡されるようなものintです。たとえば、void f( int x )!= void f( int& x ))。

だから、あなたが変更した場合f

void f( char*& p )

今、これはp_main参照を通過し、それを変更します。したがって、これはメモリリークではなく、の実行後、f割り当てp_mainられたメモリを正しく指します。


PS同じことは、ダブルポインタを使用して行うことができます(たとえば、C参照がないため)。

void f( char** p )
{
    *p = new char[ 100 ];
}
int main()
{
    char* p_main = NULL;
    f( &p_main );

    return 0;
}
于 2012-07-07T15:07:12.883 に答える
12

このようなものについては、基本的に右から左(または裏返し)に宣言を読みます。

つまり、宣言されているアイテムの名前から始めて、外側に進んでいきます。この場合、名前からタイプに直接進むと、次のようになります。

ここに画像の説明を入力してください

于 2012-07-07T15:18:46.933 に答える