zoukankan      html  css  js  c++  java
  • 21年4月15分支循环函数(二)

    1.数组的访问

    2. while中数组越界问题

    1.数组的访问

    1.1

    int ar[10]={0};

    这里不能对数组名直接++, 比如 ar++ ,这就是错误的

    因为ar是一个常量,表示的是数组首地址不能改变

    1.2  下标访问  最后都转换成  指针访问

    ar[ i ]  =>   *( ar+i )

    i[ ar ]  =>   *( i+ar )

    这两个语句是等价

    2. while中数组越界问题

    int FindValue(int* br, int n, int value)
    {
      assert(br != nullptr && n > 0);
      int i = n - 1; 
      while (i >= 0 && (value != br[i]))
      {
        i--;
      }
    return i;
    
    }
    while (value != br[i] && i >= 0  )  {  i--; }
    这一句有什么问题?
    当 i 值是 1 的时候,满足条件,执行完后i为0
    当 i 值是 0 的时候,满足条件,执行完后i为-1

    这个时候,问题来了:
    value != br[-1]  在&&前面,也就是会先对值进行比较,再判断。
    不管最后是真是假,这里对 br[-1] 进行访问就是越界,这个内存是不该被访问的,造成的后果是无法预测的。

    修正:
    while (i >= 0 && (value != br[i])) 就可以了
    因为是&&,前面关于下标的判断为假后,后面就不执行了。 这样就避免了越界。
     
    
    
    int main()
    {
      int value = 0;
      int arr[10] = {12,23,34,45,56,67,78,89,90,100};
      scanf_s("%d",&value);
      printf("下标是 %d", FindValue(arr, 10, value));
    }
    Linux学习笔记
  • 相关阅读:
    Ne10编译安装
    AR中的SLAM(一)
    2016总结&2017计划
    DSO之光度标定
    DBoW2库介绍
    Kinect2.0 for Mac开箱
    SVO原理解析
    【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)
    【编程开发】PHP---面向对象教程
    【编程开发】Python---列表
  • 原文地址:https://www.cnblogs.com/zealwang/p/14664262.html
Copyright © 2011-2022 走看看