【发布时间】:2016-11-02 17:22:13
【问题描述】:
我是 C++ 新手,我需要帮助,因为如果我认为不同的两种方式实际上是同一件事,我会感到有点困惑。 所以这是我将字符数组传递给函数的代码。
// This is the first style I use
void functionPTR( char *ptr ) // Pass by reference
{
// just put up some random code
strcpy(ptr,"BY_POINTER");
cout<<ptr[0]; // random thing
}
// This is the Second style I use
void functionVAL( char val[] ) // Pass by value
{
... code here
}
这是我的困惑。
我一直认为第一个基本上是通过引用传递,函数中变量的任何更改都会改变原始传递的变量,并认为第二个是传统的按值传递方式,函数创建自己的值并使用它来修改哪个不影响原始传递的变量。
但这里的事情并不如我所愿。在这两种情况下,函数对变量所做的任何更改都会反映在原始传递的变量中。
谁能解释一下这件事实际上是如何工作的。请不要对我苛刻,因为我仍在自学。
感谢您过来阅读我的问题并帮助我。
【问题讨论】:
-
在这种情况下,数组衰减为该类型的指针,因此两者完全相同。
-
不不不不不不|贝茨说的是对的。
-
所以基本上两者都做同样的事情,但只是表示方式不同,对吧?
-
这个问题已经回答了here。
-
我完全不同意这个问题被标记为重复,因为它明确地解决了 C++,而另一个问题是关于 C。事实上,即使是公认的答案也指的是 C99 草案。 SO 的人们通常对 C 不是 C++ 非常挑剔(而且是正确的),所以我不明白为什么这应该是一个骗局。