为了账号安全,请及时绑定邮箱和手机立即绑定

是在C ++中通过指针参数传递值吗?

是在C ++中通过指针参数传递值吗?

C++
米琪卡哇伊 2019-10-18 10:25:10
是在C ++中通过指针参数传递值吗?因为我看到对指针的任何更改都没有反映在方法之外。我通过取消引用指针所做的更改也得到了体现。在那种情况下,将指针指针用作函数的参数以在函数内修改指针值是否是可接受/标准的过程?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

双方都同意。

指针像其他任何东西一样按值传递。这意味着将复制指针变量的内容(指向的对象的地址)。这意味着,如果您在函数主体中更改指针的值,则该更改将不会反映在仍指向旧对象的外部指针中。但是您可以更改所指向的对象的值。

如果要将对指针的更改反映为外部指针(使其指向其他对象),则需要两个间接级别(指向指针的指针)。调用函数时,可以通过&在指针名称前放置a来完成。这是标准的C方式。

使用C ++时,最好使用引用代替指针(此后也推荐使用指向指针的指针)。

由于为什么引用应该优先于指针,有以下几个原因:

  • 与函数体中的指针相比,引用引入的语法噪声更少

  • 引用比指针保留更多的信息,比对编译器有用的信息多

参考文献的缺点主要是:

  • 它们打破了C的简单的按值传递规则,这使得了解函数关于参数的行为(它们是否会被更改?)变得不那么明显。您还需要确定函数原型。但这并不比使用C时所需的多指针级别还差。

  • 它们不受C的支持,当您编写适用于C和C ++程序的代码时,这可能是一个问题(但这不是最常见的情况)。

在指向指针的特定情况下,区别主要是简单性,但是使用引用也可能很容易删除指针的两个级别,并且仅传递一个引用而不是指向指针的指针。


查看完整回答
反对 回复 2019-10-18
?
牛魔王的故事

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)


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 559 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信