自从我用C ++编写代码以来已经有一段时间了。在我尝试帮助另一个人担任CIS导师时,他想知道为什么在指向整数的指针旁边必须有一个&符号。
我认为,如果您要通过引用传递指针,并且您指向其他对象,则主体在您传递val后就会知道val将等于您将其设置为等于val的任何值。
下面将有一个示例来演示我要说的话。
这正确吗?
//main function
int variable = 0;
int* val = &variable;
function1(val);
cout << *val << endl;
function2(val);
cout << *val << endl;
//Passing in a pointer with reference.
void function1(int*& value)
{
int variable = 9;
value = &variable;
}
//Passing in a pointer without reference.
void function2(int* val)
{
int variable = 9;
value = &variable;
}
我的假设是程序将输出9而不是8或0。我希望这能使你们清楚地了解我要问的问题。
答案 0 :(得分:2)
使用指针传递值和传递引用之间的区别与使用其他值相同(实际上,指针没有什么特别的,它们只是保存有时是其他对象地址的数字)。
使用int
:
void foo(int x) { x = 1; }
void bar(int& x) { x = 2; }
int main() {
int y = 5;
foo(y);
std::cout << y; // prints 5
bar(y);
std::cout << y; // prints 2
}
现在带有指针:
void foo(int* x) { x = 0; }
void bar(int*& x) { x = 0; }
int main() {
int y = 42;
int* z = &y;
foo(z);
std::cout << z; // prints the address of y
bar(z);
std::cout << z; // prints 0
}
请注意,您的function1
已损坏,因为在您调用它时
int* y;
function1(y);
std::cout << *y; // **baaam**
// the value y points to is already gone
当函数返回并且调用者无法以任何有意义的方式使用该值时,函数内部的int
将终止其生存期。请注意,在此特定示例中,您可能会得到“正确”的值,但这只是巧合,将y
传递给function1
后再引用是不确定的行为。