int *&有什么真正意义吗?

时间:2012-02-18 11:15:01

标签: c++ function

我看起来很少有大学关于C ++的练习,我发现了这个练习:

#include <iostream>
using namespace std;
int& f(int*&);
int& f(int*& x) {
    *x = 5;
    return *x;
}
int main() { 
    int y = 1, x; 
    int* z = &y; 
    x= f(z);
    cout << y << " " << x <<endl; 
}

我在想:<any type>*&有没有真正的意义? f(int*& x)f(int x)不一样吗?你不是把指针传递给变量的L值吗?

6 个答案:

答案 0 :(得分:6)

f(int*& x)f(int x)不同。在第一种情况下,x是对整数指针的引用,而在第二种情况下,x只是一个整数。

让我们从基础开始:

f(int &x)时表示x是对整数的引用,您可以更改函数中x的值,更改将反映在调用函数中。

类似地,当您编写f(int*& x)时,这意味着x是对整数指针的引用,当您更改x指向的地址时,更改也将反映在调用函数中。

答案 1 :(得分:4)

它是指向int的指针。然后,该函数可以根据需要更改指针。在你的例子中它没有意义,但它显然有用。

答案 2 :(得分:3)

nope:*&这里并不意味着“解除引用地址”。这意味着:“传递指针byref”。

答案 3 :(得分:3)

使用int* &x传递相同的指针(通过引用)。否则仅使用int* x传递指针的副本,然后您无法更改函数中的原始指针。 &x使x成为原始参数的别名。

答案 4 :(得分:3)

int& f(int*& x) {
    *x = 5;            // note: changes the pointee, not the pointer
    return *x;
}

在这个例子中,你没有通过引用传递指针来获得任何东西,因为你没有改变指针。只有在想要更改指针时才需要通过引用传递指针:

void f(int*& x) {
    x = new int(42);   // note: changes the pointer
}

答案 5 :(得分:0)

我认为当它们被用作运算符或声明符时,你会混淆sybols。

如果在声明变量时使用*,则表示veriable是指针。使用*作为运算符时,即取消引用运算符。

int *& name

只是意味着您通过引用将 指针指向int。 ** *和&amp;不要互相取消。**

如果您有这样的代码行:

var = *& var2;

然后是的,它将与:

相同
var = var2;