通过(char*ar)和(char-ar[])传递char数组是否相同?c++; 我对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 }

通过(char*ar)和(char-ar[])传递char数组是否相同?c++; 我对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 },c++,arrays,pointers,char,C++,Arrays,Pointers,Char,这就是我的困惑。 我一直认为第一种方法基本上是通过引用传递的,函数中变量的任何更改都会改变原始传递的变量,并且认为第二种方法是传统的通过值传递的方法,函数创建自己的值并使用它来修改,这不会影响原始传递的变量。 但这里的事情并不像我想象的那样。在这两种情况下,函数中对变量所做的任何更改都会反映在原始传递的变量中。 谁能给我解释一下这东西是怎么工作的吗。请不要对我苛刻,因为我还在自学。 谢谢你过来阅读我的que并帮我解决问题。它们都完全一样 当作为函数参数传递时,val衰减为指针类型:它的类

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

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

谢谢你过来阅读我的que并帮我解决问题。

它们都完全一样

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

在这两种情况下都不是获取的任何数组的深度副本。

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

两者完全相同

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

在这两种情况下都不是获取的任何数组的深度副本。



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

在这种情况下,数组会衰减到该类型的指针,所以,这两种说法都是正确的。不,不,不,不,不,贝茨所说的是正确的。所以基本上两者都做同样的事情,但是只是不同的表达方式。这个问题已经得到回答。我完全不同意这个问题,因为它明确地表达了C++,所以被标记为一个重复。而另一个问题是关于C的。事实上,即使是公认的答案也提到了C99草案。SO的成员通常对C不是C++非常挑剔(而且正确),所以我不明白为什么这应该是Dupe。在这种情况下,数组会衰变为该类型的指针,所以,这两种说法都是正确的。不,不,不,不,不,贝茨所说的是正确的。所以基本上两者都做同样的事情,但是只是不同的表达方式。这个问题已经得到回答。我完全不同意这个问题,因为它明确地表达了C++,所以被标记为一个重复。而另一个问题是关于C的。事实上,即使是公认的答案也提到了C99草案。SO的成员通常对C不是C++非常挑剔(而且正确),所以我不明白为什么这是一个DUPE。@变量的KuShanMeHaTa副本在两种情况下都是创建的,变量是一个指针,它是复制的,不是指向它的数据。哦,这完全帮助我解决了我的疑虑。非常感谢。将在9分钟内接受您的答案(时间限制)。@KushanMehta您是对的,变量没有被复制。相反,只向指向数组的函数传递一个指针。所以在这两个函数中,您使用的是同一个数组。@Slava我得到了那个东西。指针和原始字符数组之间的内存是否真的有差异。Thanks@KushanMehta你的问题没有多大意义。数组是一个内存区域,指针是一个地址。在C/C++中,数组名可以衰减到第一个元素的指针,但数组和指针是不同的。@KushanMehta在这两种情况下都创建了变量的副本,变量是一个指针,它被复制,而不是它指向的数据。哦,这帮我彻底解决了我的疑问。非常感谢。将在9分钟内接受您的答案(时间限制)。@KushanMehta您是对的,变量没有被复制。相反,只向指向数组的函数传递一个指针。所以在这两个函数中,您使用的是同一个数组。@Slava我得到了那个东西。指针和原始字符数组之间的内存是否真的有差异。Thanks@KushanMehta你的问题没有多大意义。数组是一个内存区域,指针是一个地址。在C/C++中,数组名可以衰减到第一个元素的指针,但数组和指针是不同的。
// This is the Second style I use
   void functionVAL( char val[] ) // Pass by value
                 {
                  ... code here
                }