c++把数组当做参数传递到方法里的小问题。
求助:比如我定义了一个数组,一个接收数组作为参数的方法inta[3]voidfunc(intb[])请问:当我把a传递到func里时,他传递的是数组的指针,那这个传进去的...
求助:
比如 我定义了一个数组,一个接收数组作为参数的方法
int a[3]
void func(int b[])
请问:当我把a传递到func里时,他传递的是数组的指针,那这个传进去的指针是最初定义a时的指针,还是会创造一个a的指针的副本,然后再把这个副本传进去?
还有一问题小问题:如果我定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身,还是还是传他们各自的一个副本??
谢谢~~ :) 展开
比如 我定义了一个数组,一个接收数组作为参数的方法
int a[3]
void func(int b[])
请问:当我把a传递到func里时,他传递的是数组的指针,那这个传进去的指针是最初定义a时的指针,还是会创造一个a的指针的副本,然后再把这个副本传进去?
还有一问题小问题:如果我定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身,还是还是传他们各自的一个副本??
谢谢~~ :) 展开
4个回答
展开全部
数组作为参数传递,传递的是数组的起始地址,可以认为是a指针的副本,因为在传递过程中以及在函数func中a退化为int*,而不再是与a相同的指针常量,这些对原调用函数中的a没有影响
直接定义引用类型的比较少吧?一般在函数声明的参数声明部分使用引用类型,目的在于实现对参数的修改,相当于指针,但比指针容易和安全,因此可以认为是传递的其地址
一般直接传递都为 传值传递,即仅将实参副本传入函数,函数中队形参的修改不会影响实参
若要求实现对实参的修改,一般需要声明为形参引用
直接定义引用类型的比较少吧?一般在函数声明的参数声明部分使用引用类型,目的在于实现对参数的修改,相当于指针,但比指针容易和安全,因此可以认为是传递的其地址
一般直接传递都为 传值传递,即仅将实参副本传入函数,函数中队形参的修改不会影响实参
若要求实现对实参的修改,一般需要声明为形参引用
展开全部
1:传进去的指针是最初定义a时的指针.
在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢? 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
2:传他们各自的一个副本
在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢? 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
2:传他们各自的一个副本
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就拿上例来说 如果运行func(a) 则是将实参a数组的首元素的地址传递给形参b,也就是说 a和b一起占同一段内存单元 这个与变量作为函数参数是不同的 不需要创造副本 你说的第二个问题是引用传递 引用传递跟刚才的数组(指针)传递一样 传的是他们的地址 也就是不需要创造副本 与此还有一个值传递 这个是需要创造副本的 而且 函数对传递的值 没有任何改变 只影响在函数体中产生的副本的值 你可以就指针传递 引用传递 还有值传递 研究一下 有利于以后的深入学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
创造一个a的指针的副本,然后再把这个副本传进去
定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身
定义了一个int c = 3,还有一个引用类型,比如int &c; 如果把他们分别传进相应的方法,他们是传本身
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询