1

我试图了解将引用传递给指针的不同方式。一种实现涉及传递指针引用,另一种实现涉及传递指针。

我试图了解*&后者是如何在 C++ 中解析 " " 的。

假设我想更改指针 P 指向的内容。我可以传递指针或指针的引用。如果我传递对指针的引用,我的实现将是这样的

void changePointer(int ** pp){

    //stuff that changes P from main();

}

//...

int main(){

    int a = 7;
    int * P = &a;
    changePointer(&P);
    return 0;

}

上面,changePointer 中的参数被解析为:

void changePointer(int ** pp){
//int ** pp = &P; //where P is the integer pointer being passed by main
...

但是,如果我想传递指针,而不是它的引用,那么主要我会说:

//...
changePointer(P);
//...

在 changePointer 中,我会将参数更改为:

void changePointer(int *& pp)

现在我不知道它是如何工作的或如何阅读它。这是否被解析为:

整数 * pp = &P?

4

5 回答 5

3

这就像任何其他对象一样通过引用传递指针。从右到左阅读语法:对指针的引用。这与对简单整数int *&pp = P的操作相同。int &j = i

void f(int *& ptr) {
    // f(pointer) is the same as
       int *& ptr = pointer
}

创建参数的方式与解析它的方式相同;您只是在参数中创建一个变量,该变量将等于您传递给它的参数。引用在函数内部的工作方式与它们在外部的工作方式相同。例如:

int main() {

    int a = 7,
        b = 5,
       *P = &a; // *P == 7

    int *&pp = P;

    pp = b; // *P == 5

}
于 2012-12-24T13:03:42.330 回答
1
int * & pp

发音为“pp 是对指向 int 的指针的引用”。这意味着指针参数是通过引用传递的,这意味着在函数中应用于它的任何更改都将反映在传递的对象中,而不是它的副本中。

于 2012-12-24T13:03:22.593 回答
1

这个

void changePointer(int ** pp)

不通过引用传递指针 - 它通过值传递指向指针的指针。

这个

void changePointer(int *& pp)

通过引用传递指针 - 更改函数内部的指针将更改外部的指针本身。

于 2012-12-24T13:03:03.060 回答
0

它被解析为(int *) (&) (pp).

int *就是它的本质,一个指向整数的指针。表示“&引用”,pp是变量的名称。

编译器在具有引用参数时所做的是实际传递变量的地址[或类似于地址的东西 - 这是编译器中的实现细节]。所以最终,编译器会做与你的第一个代码片段完全相同的事情&P——唯一的区别是你不能成为一个白痴并将 a 传递NULL给函数,从而导致系统可能崩溃。

于 2012-12-24T13:04:55.543 回答
0

int*&&是对指向 的指针 ( *)的引用 ( ) int

于 2012-12-24T13:03:02.020 回答