3

これは正確には何をしますか?

void insertar (struct pila *&p);

*&メソッドが次のように宣言されている場合と比較して、使用する利点は何ですか:

void insertar (struct pila *p);

またはそのように:

void insertar (struct pila &p);

*ポインタとアドレスであることは知ってい&ますが、両方ともメソッドのシグネチャに含まれていますか?

利点は何ですか?

そして、それらは何に使用されますか?

それは何をするためのものか?

4

3 に答える 3

5

の2つの意味を混同しています&。式で使用する場合は、「アドレス」演算子です。つまり、を持っていて、持っている場合はint x;&xのアドレスを取得しますx。ただし、型で&は、それが参照型であることを意味します。これらは2つの完全に別個の概念です。

以下は、を取り、pilaそれを関数にコピーします。変更pすると、関数内のコピーにのみ影響します。

void insertar(pila p);

以下はpila参照によるものであるため、関数内のオブジェクトは外部と同じオブジェクトになります。ここで変更pすると、渡されたオブジェクトが変更されます。

void insertar(pila& p);

以下は、へのポインタを取り、pilaそのポインタを関数にコピーします。ポインタを変更すると、関数内でのみ効果があります。ただし、それが指すオブジェクトは外部と同じです。

void insertar(pila* p);

以下は、pila参照によってaへのポインターを取得するため、関数内のポインターは外部と同じポインターになります。ポインタを変更すると、外部のポインタも変更されます。

void insertar(pila*& p);
于 2013-02-16T17:58:21.423 に答える
1

こちら&が参考になります。A*&は a によく似てい**ます。これにより、ポインタを変更できます。

int u = 3;

void change( int *& p ) {
    p = &u;
}

void main() {
    int *p;
    change( p );
    // p == &u
}
于 2013-02-16T18:08:53.137 に答える
0

*&例のポインタへの参照です。つまり、ポインタが指すデータとポインタ自体を変更できます。例:

int global1 = 0, global2 = 1;
void func(int*& p)
{
    *p = 42;
    p = &global1;
}

int main()
{
    int* p = &global2;
    func(p); // Now global2 == 42 and p points to global1 (p == &global1).
}
于 2013-02-16T17:58:26.403 に答える