Sul*_*lla 29 c++ pointers function pass-by-value
传递指针参数,在C++中传递值?因为我看到指针的任何更改都不会反映在方法之外.我通过解除引用指针所做的更改会被反映出来.
在这种情况下,使用指针指向函数的参数是否可以接受/标准过程来修改函数中的指针值?
kri*_*iss 38
对两者都是.
指针通过值传递为其他任何东西.这意味着复制指针变量的内容(指向的对象的地址).这意味着如果更改函数体中指针的值,则该更改将不会反映在仍将指向旧对象的外部指针中.但是您可以更改指向的对象的值.
如果要反映对指向外部指针的指针所做的更改(使其指向其他指针),则需要两个间接级别(指针指针).调用函数时,通过&在指针名前加一个来完成它.它是标准的C做事方式.
使用C++时,使用引用优先于指针(此后也指向指针).
对于为什么引用应首选指针,有几个原因:
参考文献的缺点主要是:
在指向指针的特定情况下,差异主要是简单性,但使用引用它也可以很容易地删除两个指针级别并且只传递一个引用而不是指向指针的指针.
我理解这里的困惑."按值传递"和"按参考传递"的概念即使看起来如此也不是那么清楚.请记住,计算机不知道这些概念,并且不依据它.计算机不知道类型.因此,它没有区分指针和值.让我试着用例子解释一下:
void func1(int x)
{
x = 5;
}
void func2(int *x)
{
int a;
x = &a;
}
Run Code Online (Sandbox Code Playgroud)
两个函数中的机器操作相同:它获取参数并更改它.请注意,在第二个函数中,它不会修改*x,它会修改x.
现在,如果我们称这些功能,
int y = 10;
func1(y); //value of y does not change
func2(&y); //value of &y does not change, but the value of the address which y points may change.
Run Code Online (Sandbox Code Playgroud)
我更喜欢说,基本上,每个函数调用都是"按值调用".但是在指针类型的情况下,我们有办法改变内存中另一个地址的内容.
如果我们写的func2是
void func2(int *x)
{
*x = 5;
}
Run Code Online (Sandbox Code Playgroud)
然后,这将是"通过引用调用"的真实案例.
| 归档时间: |
|
| 查看次数: |
32870 次 |
| 最近记录: |