0
点赞
收藏
分享

微信扫一扫

C++强化 | 04 数组越界(含数组索引与数组长度总结)



戳一戳!和我一起走进信息学的世界

导读

纸上得来终觉浅,绝知此事要躬行!学习知识,不能光学,还要不断练习,在练习中提升自我。


前面课堂我们讲解了一维数组的基本知识,今天我们将带领大家深度探讨数组越界的问题,并总结数组索引和数组长度以及他们之间的关系。


让我们一起不断提升我们对信息学的了解吧!



1 引入

我们前面讲了数组的基本知识,我想大家通过学习掌握了数组的基本知识及使用方法,对数组有了更加深刻的理解和体会。


假设我们现在有如下数组:


int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};


我们知道可以以如下方式访问数组元素:


cout<<a[0]<<endl; //访问第一个元素
cout<<a[5]<<endl; //访问第六个元素


如果我们以如下方式访问会出什么问题呢?


cout<<a[10]<<endl;



2 数组越界

1 什么是数组越界

访问数组元素时,数据访问范围超出了数组长度,这个时候,计算机会返回一个随机值(很多情况下为0,也有可能是一个特别大的数值)。


程序运行时访问的数组元素并不在数组的存储空间内,或者说,数组索引超出了数组长度,这就是数组越界


数组越界说明数组访问索引大于或者等于数组长度。因为数组索引范围是从0开始,到长度-1结束。


但是数组越界在编译、运行时并不会提示出错,不易发现。


2 数组越界的后果

简单来说,数组越界,访问到的数据不是用户自己定义的数据,我们的所求非我们所想。


更多的是数组越界会让程序访问超出数组边界的存储单元,造成内存的混乱。


所以我们要避免数组越界情况的发生。为了能够避免这种情况的发生,我们就需要掌握数组索引和数组长度之间的关系。并在今后的使用中遵守这些关系。

3 数组索引与数组长度

1 索引与长度的使用注意事项

数组索引和数组长度是我们在使用数组的时候,必须要涉及到的知识。


数组长度是数组在定义的时候,必须要指定好的常量,也就是说在定义时,数组长度必须为常量,不能使用变量!


数组索引是在数组进行赋值、访问等多个操作时,针对数组中的某个值进行操作,一般都为变量。


在一个程序中,我们定义一个数组,并访问数组的某个值的时候,代码如下:


int arr[10] = {1, 2, 3, 4, 5, 6, 7};
cout<<arr[5]<<endl;


我们发现,在这个代码中,定义时候,用到了整数,访问数组元素的时候,用到了整数。那我们应该怎么区分这个整数是数组的索引,还是数组的长度呢


数组长度是用来声明数组的元素个数的。所以在数组定义过程中使用到的整数,表达的含义就是数组的长度


在剩余所有的使用过程中,包括数组的赋值、数组的访问等,都是针对某一个具体的数组元素进行操作。这个时候用到的是数组的索引


相信大家也能越来越意识到数学基础在信息学学习中的重要性,相关的知识,大家可以购买下面的书籍,打好数学基础哦!



2 索引与长度的关系

数组长度是指数组中能够包含的元素的个数。


数组索引是指数组中元素的序号,从0开始。


如果数组长度我们定义为n,则数组索引是从0到n-1。所以数组索引满足如下关系:


数组索引 < 数组长度
max{数组索引} + 1 = 数组长度


4 习题

【题目】


找呀找呀找朋友,找到一个好朋友。


数字m想要在10个数里面找到自己的好朋友,已知数字m的朋友和m相差为奇数,判断这10个数里面有几个是m的朋友。


【输入说明】

第一行一个整数m。(0<m<1000)

第二行10个整数。(0<整数<10000)


【输出说明】

一行一个整数n,m的朋友个数。


【输入示例】

5
1 2 3 4 5 6 7 8 9 11


【输出示例】

4


说在后面的话

相信大家通过这篇文章的学习,能够对数组越界更加深刻的认识了,也能掌握数组索引和数组长度之间的关系。希望大家能够多多练习多多思考,掌握数组,为以后的学习打下扎实的基础。


如果想要了解更多关于信息学的知识,那就关注我吧!



AI与区块链技术

C++强化 | 04 数组越界(含数组索引与数组长度总结)_数组

长按二维码关注


举报

相关推荐

0 条评论