边界问题

原创 2016年08月31日 18:15:13

边界计算是这样吗?

现在假想有一个数组有十个元素,那么其下标允许的范围是多少呢?
在C中,其下标是0~9的数
所以我们知道在n个元素的数组中,没有下标为n的元素,其下标为0~(n-1)

边界的困惑

int a[10];
for(int i=1; i <= 10; i++)
    a[i]=0;

这样的验证的结果,细细想想,必然是下标越界了,可是
一切又看起来这么合理

这是优势?

C语言的这种设计,也许会让大家在这里懵上一阵子,可是,
这种设计,恰恰是其最大的优势所在。下面我们慢慢讲解。

在很多的的程序设计错误中,“栏杆错误”是最难察觉的一种,就像上面的Code中的一样,看似那么合理,可是就是有越界这样的致命错误。

听题!
100米的路每2米一根栏杆,问要多少根,“显而易见”100/2=50,
当然他是错误的,实际上是51根。

这样思考的方法,最简单的应该是这样,除了右边的2米,其余每一个2米的左边总有一根栏杆,补上这最右边的一根,刚刚好就是51根

所以,在边界的问题中千万不能凭直觉。

又一个问题

如果一个数x,x>=10,x<=19,那么其中的整数有多少个呢?
很显然19-10=18(不过很遗憾,很接近)
可是这样到底是多少呢?17?18?19?

这样我们继续从头开始思考这个问题了
若是有一个数x>=15,x<=15那么x的值有多少个呢?当然你应该自信的大声呐喊 就是15!只有一个!
所以我们要记得,当上下边界重合时只有一个元素

所以现在我们适当外推,从1,到第n个数
那么实际上就是(n-1+1)个元素了,于是乎,所有的重点就在这个+1的上面了,
那么说了这么多,要是一直问这个问题提心吊胆,那这以后还怎么Code啊。

不对称的美丽

当我们把前面的例子改成这个样子呢,x>=10,x<19,这样上边界就没有在我们的范围内了,
问题就得到了竟然的简化
19-10=9 你可以自信的喊出答案了,
这中并不对称的例子,也是如此美丽的

C中的不对称

在C的数组里,元素的下标是从0开始的,这样的优势就是分明显啦

int array[10];
for(int i=0; i<10; i++ )    //  1
    a[i]=0;
for(int i=0; i<=9; i++ )    //  2
    a[i]=0;

上面两个for都是遍历数组进行了初始化的,现在是不是明白优势所在了?
这样for的上界刚好就是10,就是array的元素个数了啊
所以C这样的设计,大大的减少了我们脑筋急转弯的机会,妙哉!

所以日后大家Coding的时候,一定要使用第一种的结构,多方便啊

结语

路漫漫其修远兮,吾将上下而求索
路漫漫其修远兮,吾将上下而求索
路漫漫其修远兮,吾将上下而求索

版权声明:本文为博主原创文章,未经博主允许不得转载。

MATLAB图像函数以及应用(第六章)边界问题

1、bwboundaries    二值图像区域边界追踪、、 功能:在二值图像中进行区域边界的追踪,采用区域跟踪的算法,给出二值图像中所有的外边界和内边界 用法: [B L]=bwboundaries...
  • qq_18343569
  • qq_18343569
  • 2015年07月20日 22:39
  • 1423

C语言中的边界计算与不对称边界(一)

C语言中的边界计算与不对称边界(一)
  • kerry0071
  • kerry0071
  • 2014年06月30日 21:55
  • 1406

0033算法笔记——【分支限界法】分支限界法与单源最短路径问题

1、分支限界法     (1)描述:采用广度优先产生状态空间树的结点,并使用剪枝函数的方法称为分枝限界法。      所谓“分支”是采用广度优先的策略,依次生成扩展结点的所有分支(即:儿子结点)。...
  • liufeng_king
  • liufeng_king
  • 2013年05月08日 17:39
  • 26305

mysql使用between and处理时间区间不包括右边界问题

mysql使用between and处理时间区间不包括右边界问题 最近自己写项目发现mysql使用between and处理时间区间不包括右边界。  SELECT * FROM timeline W...
  • qq_28081081
  • qq_28081081
  • 2017年11月21日 14:39
  • 84

[研发经验] 导致游戏研发不顺利的几个典型“边界问题”

在我们开发游戏的时候,往往最初我们都有很好很好的想法,但是当动手做的时候,我们对于最初的想法进行了一再的妥协,结果游戏初期我们那些美好的游戏感觉和体验的设计,到最后一个也没有,游戏本身至少自己是觉得惨...
  • summerhust
  • summerhust
  • 2013年07月30日 12:01
  • 989

C#网络编程(四、Socket中英文字符大小和文本边界问题)

转自:http://blog.csdn.net/shanyongxu/article/details/51190820,本人学习受益匪浅,楼主把重点都标记出来了,请点击链接查看原文,尊重楼主大大版权。...
  • qq_33337811
  • qq_33337811
  • 2017年05月31日 10:05
  • 241

关于图像处理中的核与卷积、以及卷积边界问题

所谓的核,其实就是一个矩阵。而需要处理的图片其实也是一个大的矩阵。形象点说,核就像一个可以滑动的小四方形,叠加于处理的图片矩阵之上——有点像用单词书(需要处理的图像)被单词时附带的红色遮挡塑料片(核)...
  • myouki
  • myouki
  • 2013年05月24日 14:16
  • 932

Mina解码边界问题的处理

在“编码”和“解码”中的一个重要问题是如何在字节流中判断消息的边界。通常来说,有三种办法解决这个问题: 使用固定长度的消息。这种方式实现起来比较简单,只需要每次读取特定数量的字节即可。 使...
  • booooooooooooooooooo
  • booooooooooooooooooo
  • 2013年12月18日 23:24
  • 934

MATLAB图像函数以及应用(第六章)边界问题

1、bwboundaries    二值图像区域边界追踪、、 功能:在二值图像中进行区域边界的追踪,采用区域跟踪的算法,给出二值图像中所有的外边界和内边界 用法: [B L]=bwboundaries...
  • qq_18343569
  • qq_18343569
  • 2015年07月20日 22:39
  • 1423

android 2D游戏开发,引擎设计(六) 画面平移晃动与平移边界问题

舞台绘画时屏幕监听事件加入同步机制  synchronized (stage.getSynLock()) 绘制时代码 // 绘制舞台上场景中所有的图层和所有的精灵 try { ...
  • b275518834
  • b275518834
  • 2013年05月31日 14:26
  • 1378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:边界问题
举报原因:
原因补充:

(最多只允许输入30个字)