为了账号安全,请及时绑定邮箱和手机立即绑定

通过值将数组传递给函数

通过值将数组传递给函数

C
万千封印 2019-12-26 09:51:38
以下是C编程Just FAQs一书的摘录。这不是错误的吗,因为数组永远不能通过引用传递?VIII.6:如何通过值将数组传递给函数?答:可以通过在调用的函数中声明数组名称[并]在其末尾加上方括号(和)的方式,将数组按值传递给函数。调用函数时,只需将数组的地址(即数组的名称)传递给被调用的函数。例如,以下程序将数组传递给以 值x[]命名 byval_func()的函数:该int[]参数告诉编译器该byval_func() 函数将采用一个参数-整数数组。byval_func()调用该 函数时,将数组的地址传递给 byval_func():byval_func(x);因为该数组是按值传递的,所以将制作该数组的精确副本并将其放置在堆栈中。然后,被调用函数将接收该数组的副本并进行打印。因为传递给的数组 byval_func()是原始数组的副本,所以在byval_func()函数中修改数组对原始数组没有影响。
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

因为该数组是按值传递的,所以将制作该数组的精确副本并将其放置在堆栈中。

这是不正确的:不复制数组本身,仅将指向其地址的指针的副本传递给被调用方(放置在堆栈上)。(无论您将参数声明为int[]还是int*,它都会衰减为指针。)这使您可以从被调用函数内部修改数组的内容。因此,这

因为传递给byval_func()的数组是原始数组的副本,所以在byval_func()函数中修改该数组对原始数组没有影响。

是完全错误的(对@Jonathan Leffler在下面的评论表示赞赏)。但是,在函数内部重新分配指针不会将指针更改为函数外部的原始数组。


查看完整回答
反对 回复 2019-12-26
?
不负相思意

TA贡献1777条经验 获得超10个赞

在C和C ++中,无法通过值将完整的内存块作为参数传递给函数,但允许我们传递其地址。在实践中,这几乎具有相同的效果,并且是更快,更有效的操作。

为了安全起见,您可以传递数组大小或将const限定符放在指针之前,以确保被调用者不会对其进行更改。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 493 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信