我是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
}
这是我的困惑。
我一直认为第一个基本上是通过引用传递的,函数中变量的任何变化都会改变原始传递的变量,并认为第二个是传统的值传递方式,其中函数创建自己的值并使用它来修改不会影响原始传递的变量。
但是这里的事情并不像我预期的那样。在这两种情况下,函数对变量所做的任何更改都会反映在原始传递的变量中。
任何人都可以解释我这件事实际上是如何工作的。请不要苛刻我,因为我仍在自己学习。
感谢您停下来阅读我的阙并帮助我。
答案 0 :(得分:7)
他们完全相同。
当作为函数参数传递时,val
将衰减为指针类型:它的类型也是char*
。
在中,案例都不是任何数组的深层副本。
使用val[i]
,ptr[i]
,*(val + i)
或*(ptr + i)
访问数组元素纯属个人品味。