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

求助:
比如 我定义了一个数组,一个接收数组作为参数的方法
int a[3]
void func(int b[])
请问:当我把a传递到func里时,他传递的是数组的指针,那这个传进去的指针是最初定义a时的指针,还是会创造一个a的指针的副本,然后再把这个副本传进去?
还有一问题小问题:如果我定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身,还是还是传他们各自的一个副本??
谢谢~~ :)

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

直接定义引用类型的比较少吧?一般在函数声明的参数声明部分使用引用类型,目的在于实现对参数的修改,相当于指针,但比指针容易和安全,因此可以认为是传递的其地址
一般直接传递都为 传值传递,即仅将实参副本传入函数,函数中队形参的修改不会影响实参
若要求实现对实参的修改,一般需要声明为形参引用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-25
1:传进去的指针是最初定义a时的指针.

在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢? 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
2:传他们各自的一个副本
第2个回答  2011-06-30
就拿上例来说 如果运行func(a) 则是将实参a数组的首元素的地址传递给形参b,也就是说 a和b一起占同一段内存单元 这个与变量作为函数参数是不同的 不需要创造副本 你说的第二个问题是引用传递 引用传递跟刚才的数组(指针)传递一样 传的是他们的地址 也就是不需要创造副本 与此还有一个值传递 这个是需要创造副本的 而且 函数对传递的值 没有任何改变 只影响在函数体中产生的副本的值 你可以就指针传递 引用传递 还有值传递 研究一下 有利于以后的深入学习
第3个回答  2011-06-25
创造一个a的指针的副本,然后再把这个副本传进去

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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网