在哪些条件下,我们将指针作为函数参数

Under which conditions we pass pointers as function argument?

本文关键字:函数 参数 指针 我们将 条件下      更新时间:2023-10-16

我是学习C 的新手。我试图理解,在哪些条件下,我们将指针作为函数参数。根据我的理解,当我们将指针作为函数参数传递时,它覆盖了最初存储的值。当我们通过参考时,情况也是如此。还有其他原因吗?请尝试使用简单的语言来解释这一点,以便我可以理解。

// pass a reference
void Foo(int &x)
{
  x = 2;
}
//pass a pointer
void Foo_p(int *p)
{
  *p = 9;
}
// pass by value
void Bar(int x)
{
  x = 7;
}
int main()
{
  int x = 4;
  cout<< "before function call "<< x<< endl;
  Foo(x);  // x now equals 2.
  cout<< "after first call x is "<< x <<endl;
  Foo_p(&x); // x now equals 9.
  cout<< "after second call x is "<< x <<endl;
  Bar(x);  // x still equals 9.
  cout<< "after third call x is "<< x <<endl;
} 

没有简单的规则。

相反,您必须了解指针在C 中的意思,以及它们在您当前的代码库中的含义。

编程是关于与编译器以及其他程序员以及将来与您自己进行沟通。在所有这些情况下,指针或参考都有不同的影响。

指针是一张纸,上面有街道地址。如果我把一张纸上的纸上放在我的房子上,您可以用它来派遣建筑人员销毁,更换或重建我的房屋。

值是实际的。如果我将您的实际房屋的副本传递给您,那么您无能为力会影响我的原始房屋。

参考是对值的别名。

纸上写有房屋地址的纸本身就是一个价值。我可以给你另一张纸来指代,然后使用第二张纸,您可以得到抄写员来重写第一张纸。

有了参考,没有 value ,只有对另一个值的引用。

您可以将参考视为防止任何人更改的指针,并且无法获得指针的指针。

此外,与参考不同的指针是"无效的" - 它们可以处于无所事事的状态。指针本身可以改变。按照惯例,可以将指针传递给元素数组的第一个元素,以及长度,并希望用户复制和/或修改该指针以参考所有元素。

Pointers是价值,您可以对它们执行操作(而不是指向它们的指向)。如果您有街道上房屋的地址,则可以"在街道上获得下一所房子"(递增指针)。但是,如果您在最后一所房子之后要求房子,请遇到您。

所有这些都是它们。从传统上讲,程序员基本上永远不会使用参考来持有免费存储分配的对象("堆"对象),而指针有时会这样做。在某些代码库中,只有智能指针"拥有"此类引用,而其他参考则只观察。

在某些代码库中,使用指针来表示无效的参考是有效的;在其他情况下,这是厌食症。