c++把数组当做参数传递到方法里的小问题。

2024-12-16 02:53:51
推荐回答(4个)
回答1:

数组作为参数传递,传递的是数组的起始地址,可以认为是a指针的副本,因为在传递过程中以及在函数func中a退化为int*,而不再是与a相同的指针常量,这些对原调用函数中的a没有影响

直接定义引用类型的比较少吧?一般在函数声明的参数声明部分使用引用类型,目的在于实现对参数的修改,相当于指针,但比指针容易和安全,因此可以认为是传递的其地址
一般直接传递都为 传值传递,即仅将实参副本传入函数,函数中队形参的修改不会影响实参
若要求实现对实参的修改,一般需要声明为形参引用

回答2:

1:传进去的指针是最初定义a时的指针.

在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢? 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
2:传他们各自的一个副本

回答3:

就拿上例来说 如果运行func(a) 则是将实参a数组的首元素的地址传递给形参b,也就是说 a和b一起占同一段内存单元 这个与变量作为函数参数是不同的 不需要创造副本 你说的第二个问题是引用传递 引用传递跟刚才的数组(指针)传递一样 传的是他们的地址 也就是不需要创造副本 与此还有一个值传递 这个是需要创造副本的 而且 函数对传递的值 没有任何改变 只影响在函数体中产生的副本的值 你可以就指针传递 引用传递 还有值传递 研究一下 有利于以后的深入学习

回答4:

创造一个a的指针的副本,然后再把这个副本传进去

定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身