3 回答
TA贡献1797条经验 获得超6个赞
双方都同意。
指针像其他任何东西一样按值传递。这意味着将复制指针变量的内容(指向的对象的地址)。这意味着,如果您在函数主体中更改指针的值,则该更改将不会反映在仍指向旧对象的外部指针中。但是您可以更改所指向的对象的值。
如果要将对指针的更改反映为外部指针(使其指向其他对象),则需要两个间接级别(指向指针的指针)。调用函数时,可以通过&
在指针名称前放置a来完成。这是标准的C方式。
使用C ++时,最好使用引用代替指针(此后也推荐使用指向指针的指针)。
由于为什么引用应该优先于指针,有以下几个原因:
与函数体中的指针相比,引用引入的语法噪声更少
引用比指针保留更多的信息,比对编译器有用的信息多
参考文献的缺点主要是:
它们打破了C的简单的按值传递规则,这使得了解函数关于参数的行为(它们是否会被更改?)变得不那么明显。您还需要确定函数原型。但这并不比使用C时所需的多指针级别还差。
它们不受C的支持,当您编写适用于C和C ++程序的代码时,这可能是一个问题(但这不是最常见的情况)。
在指向指针的特定情况下,区别主要是简单性,但是使用引用也可能很容易删除指针的两个级别,并且仅传递一个引用而不是指向指针的指针。
TA贡献1830条经验 获得超3个赞
使用指针传递值, 我将通过示例进行解释:
void f(int *ptr)
{
cout<<*ptr;
}
int main ()
{
int a=10;
int *aptr=&a;
f(aptr);
return 0;
}
这里,在主函数中,a是一个整数变量,其内容为10,地址为00F8FB04(假定)。aptr是指向整数的指针,存储整数变量a的地址,因此aptr内容是整数变量a的地址00F8FB04。当我们将aptr作为函数参数传递时,只会将aptr的内容(即地址)复制到函数参数。因此,ptr将收到aptr内容的副本(即地址00F8FB04)
- 3 回答
- 0 关注
- 581 浏览
添加回答
举报