编程好习惯3——确保数组操作不越界


有三种常见的编程技巧确保函数的操作不超出数组实参的边界。

 

第一种方法:放置标记

       在数组本身放置一个标记来检测数组的结束。C 风格字符串就是采用这种方法的一个例子,它是一种字符数组,并且以空字符 null 作为结束的标记。处理 C风格字符串的程序就是使用这个标记停止数组元素的处理。


第二种方法: 使用标准库规范

      是传递指向数组第一个和最后一个元素的下一个位置的指针。这种编程风格由标准库所使用的技术启发而得

使用这种方法重写函数fun并调用该函数,如下所示:

void fun(const int *beg, const int *end)
{
   while (beg != end) 
  {
     cout << *beg++ << endl;
  }
}
int main()
{
  int j[2] = {0, 1};
  printValues(j, j + 2);
  return 0;
}

       每次循环都使beg 指针指向下一个元素,从而实现数组的遍历。当 beg 指针等于结束标记时,循环结束。结束标记就是传递给函数的第二个形参。调用这个版本的函数需要传递两个指针:一个指向要输出的第一个元素,另一个则指向最后一个元素的下一个位置。只要正确计算指针,使它们标记一段有效的元素范围,程序就会安全。

显式传递表示数组大小的形参

 

第三种方法:将第二个形参定义为表示数组的大小

       这种用法在 C 程序和标准化之前的 C++ 程序中十分普遍。用这种方法再次重写函数 fun,新版本及其调用如下所示:

void fun(const int ia[], size_t size)
{
   for (size_t i = 0; i != size; ++i) 
      {
        cout << ia[i] << endl;
      }
}
int main()
{
   int j[] = { 0, 1 }; 
   fun(j, sizeof(j));
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值