传递char数组(char*ar)和(char ar [])是一样的吗?C++

Kus*_*hta 1 c++ arrays pointers char

我是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
                }
Run Code Online (Sandbox Code Playgroud)
// This is the Second style I use
   void functionVAL( char val[] ) // Pass by value
                 {
                  ... code here
                }
Run Code Online (Sandbox Code Playgroud)

这是我的困惑.我一直认为第一个基本上是通过引用传递的,函数中变量的任何变化都会改变原始传递的变量,并认为第二个是传统的值传递方式,其中函数创建自己的值并使用它来修改不会影响原始传递的变量.

但是这里的事情并不像我预期的那样.在这两种情况下,函数对变量所做的任何更改都会反映在原始传递的变量中.
任何人都可以请你解释一下这件事是如何运作的.请不要苛刻我,因为我仍在自己学习.

感谢您停下来阅读我的阙并帮助我.

Bat*_*eba 7

它们都完全一样.

当作为函数参数传递时,val 衰减为指针类型:它的类型也是char*.

任何情况下都不是任何数组的深层副本.

无论您使用val[i],ptr[i],*(val + i),或*(ptr + i)访问数组元素纯粹是个人喜好问题.

  • 在两种情况下都创建了@KushanMehta变量的副本,变量是一个指针,它被复制,而不是指向它的数据. (2认同)