Jef*_*rth 1 c++ pointers reference pass-by-reference pass-by-value
我只是在学习c ++,而且来自c,我在书中看到的一些函数调用让我很困惑:
char a;
cin.get(a);
Run Code Online (Sandbox Code Playgroud)
在C中,这可能不起作用,如果你这样做,就没有办法获得输出,因为你是通过值传递而不是通过引用,为什么这在c ++中工作?引用和去除是隐式的(编译器知道cin.get需要一个指针,所以它被引用)?
Leo*_*Hat 11
C++
这可以在C++中工作,因为函数签名get()可能是这样的:
void get(char& a); // pass-by-reference
Run Code Online (Sandbox Code Playgroud)
在&之后的符号char表示的编译器,当你在一传比char的值,它应该在通过引用的char,而不是做一个副本.
这实质上意味着内部所做的任何更改都get()将反映在a方法之外的值中.
如果函数签名get()是这样的:
void get(char a); // pass-by-value
Run Code Online (Sandbox Code Playgroud)
然后a将通过值传递,这意味着a在作为参数传递给方法之前进行复制.任何更改a都只是本地方法,并在方法返回时丢失.
C
这在C中不起作用的原因是因为C只有pass-by-value.在C中模拟传递引用行为的唯一方法是按值传递其指针,然后在修改方法中的值时取消引用指针值(从而访问相同的内存位置):
void get(char* a)
{
*a = 'g';
}
int main(int argc, char* argv[])
{
char a = 'f';
get(&a);
printf("%c\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此程序将输出:
g
Run Code Online (Sandbox Code Playgroud)