c++ - 通过 (char* bar) 和 (char are[ ]) 传递 char 数组是否相同? C++

标签 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
                }

// This is the Second style I use
   void functionVAL( char val[] ) // Pass by value
                 {
                  ... code here
                }

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

但是这里的事情并不像我想象的那样。在这两种情况下,函数对变量所做的任何更改都会反射(reflect)在原始传递的变量中。
谁能解释一下这东西是如何工作的。请不要对我太苛刻,因为我还在自学。

感谢您停下来阅读我的问题并帮助我。

最佳答案

它们完全相同。

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

两种情况下都不是获取任何数组的深层拷贝。

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

关于c++ - 通过 (char* bar) 和 (char are[ ]) 传递 char 数组是否相同? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386020/

相关文章:

javascript - javascript 全局数组的作用域

arrays - 有效地合并两个数组 - 一个已排序,另一个未排序

基于指向 const 的指针的 C 函数

c - 字符串在函数调用后设为 NULL

c++ - 这是一个 nullptr 吗?

c++ - 如何从另一个线程唤醒没有超时时间的 Select 调用

c++ - 为什么 GNU make 总是重新链接我的项目?

Javascript 异步等待代码执行顺序

C 数组被覆盖?

c++ - 如何从另一个命名空间中扩展 C++ 命名空间?