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

是在C ++中通过指针参数传递值吗?因为我看到对指针的任何更改都没有反映在方法之外。我通过取消引用指针所做的更改也得到了体现。

在那种情况下,将指针指针用作函数的参数以在函数内修改指针值是否是可接受/标准的过程?


米琪卡哇伊
浏览 582回答 3
3回答

互换的青春

双方都同意。指针像其他任何东西一样按值传递。这意味着将复制指针变量的内容(指向的对象的地址)。这意味着,如果您在函数主体中更改指针的值,则该更改将不会反映在仍指向旧对象的外部指针中。但是您可以更改所指向的对象的值。如果要将对指针的更改反映为外部指针(使其指向其他对象),则需要两个间接级别(指向指针的指针)。调用函数时,可以通过&在指针名称前放置a来完成。这是标准的C方式。使用C ++时,最好使用引用代替指针(此后也推荐使用指向指针的指针)。由于为什么引用应该优先于指针,有以下几个原因:与函数体中的指针相比,引用引入的语法噪声更少引用比指针保留更多的信息,比对编译器有用的信息多参考文献的缺点主要是:它们打破了C的简单的按值传递规则,这使得了解函数关于参数的行为(它们是否会被更改?)变得不那么明显。您还需要确定函数原型。但这并不比使用C时所需的多指针级别还差。它们不受C的支持,当您编写适用于C和C ++程序的代码时,这可能是一个问题(但这不是最常见的情况)。在指向指针的特定情况下,区别主要是简单性,但是使用引用也可能很容易删除指针的两个级别,并且仅传递一个引用而不是指向指针的指针。

牛魔王的故事

使用指针传递值, 我将通过示例进行解释:void f(int *ptr){&nbsp; &nbsp;cout<<*ptr;}int main (){&nbsp; &nbsp;int a=10;&nbsp; &nbsp;int *aptr=&a;&nbsp; &nbsp;f(aptr);&nbsp; &nbsp;return 0;}&nbsp;这里,在主函数中,a是一个整数变量,其内容为10,地址为00F8FB04(假定)。aptr是指向整数的指针,存储整数变量a的地址,因此aptr内容是整数变量a的地址00F8FB04。当我们将aptr作为函数参数传递时,只会将aptr的内容(即地址)复制到函数参数。因此,ptr将收到aptr内容的副本(即地址00F8FB04)
打开App,查看更多内容
随时随地看视频慕课网APP