华为代码质量军规 (1) 数组访问,必须进行越界保护

本文讨论了C++中数组作为函数参数时可能导致的越界访问问题,提出了四种解决方法:显示传递数组长度、指定开始和结束位置、添加结束标记以及通过引用传递数组。特别强调了通过引用传递时的注意事项,包括数组长度必须为常量以及使用const修饰以防止意外修改。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/thecoldone/article/details/50759044

 

C++中数组作为形参传递给函数时把数组视为指针,并没有将数组的长度信息传递给函数,因而在函数中稍有不慎就会造成数组内存的越界访问。为了避免这个问题,下面根据书上给的内容做了一点总结和说明。

数组形参的定义

void func(int *) {/* ...*/}

void func(int[]) {/* ... */}

void func(int[10]) {/* ...*/}

上面三种形参表示方式都是合法和等价的,可以看到C++将数组视为指针。另外第三种表示方式看上去在方括号中用一个常量指定了数组的长度,但事实上编译器忽略了这一方式指定的数组长度,在函数调用时即使你给func函数传递一个长度不为10的数组编译器同样可以让你通过,只不过这在实际运行中可能造成数组内存的越界访问。(注:这种表示方式要和下面介绍的数组引用相区分开来)

因为C++并不支持将数组的长度信息自动传递给函数,所以我们在编写代码时必须采取措施来避免数组形参带来的越界访问问题,下面给出几种方法

1.显示传递数组长度:在函数定义的参数列表中加多一个表示数组大小的参数,这种做法比较常见,举个例子:

void func(int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值