我看起来很少有大学关于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值吗?
答案 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;