提供微网站制作网络公司推广公司网站有哪些方式
news/
2025/9/23 17:41:18/
文章来源:
提供微网站制作网络公司,推广公司网站有哪些方式,电脑h5制作工具,建筑建设规范网站很相似的两个概念#xff0c;一不小心就会混淆
首先#xff0c;对两个名词做一个大概的解释#xff1a;
下标越界 在引用数组元素时#xff0c;使用的下标超过了该数组下标的应有范围#xff0c;但应注意的是#xff1a; C/C不对数组做边界检查。 可以重写数组的每一…很相似的两个概念一不小心就会混淆
首先对两个名词做一个大概的解释
下标越界 在引用数组元素时使用的下标超过了该数组下标的应有范围但应注意的是 C/C不对数组做边界检查。 可以重写数组的每一端并写入一些其他变量的数组或者甚至是写入程序的代码。不检查下标是否越界可以有效提高程序运行的效率因为如果你检查那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界这就会导致程序的运行速度下降所以为了程序的运行效率C / C才不检查下标是否越界。发现如果数组下标越界了那么它会自动接着那块内存往后写。 关于C/C为什么不对数组的下标是否越界做检查可以参考 http://www.xuebuyuan.com/967089.html 因为编译器不会自动检测你的数组下标是否越界而是把这个任务交给了程序员自己所以我们在写程序引用数组元素时一定注意不要让数组的下标越界。 还有初学者一定不能忘了数组的下标是从0开始的不是常识中的从1开始。内存溢出 在初始化数组(给数组元素赋值)时初始化(赋值)元素的个数超过了数组定义时元素的个数。这里的元素个数就是在定义数组时那个方框框里的数字对于多维数组来说元素个数 每个方框框里的数字之积。 当然求数组元素个数可以用公式 数组元素个数 sizeof(数组名)/sizeof(数组任意一个元素)
用两个具体的例子来看看它们之间的区别
1、 下标越界
#include stdio.hint main()
{int i10, arr[10];int sz sizeof(arr) / sizeof(arr[0]);int index 0;scanf(%d, index);arr[index] 20;printf(arr[%d] %d\n, index,arr[index]);system(pause);return 0;
}
数组定义为arr[10]它的下标范围是 0–9 超出这个范围就会发生下标溢出 以上两张图片是在VS2013里面的运行结果两次输入的下标都会越界但为什么第一张图报错了数组下标越界而第二张没有。 这是因为VS2013这个编译器在处理数组下标时只认为当引用的下标等于数组元素个数时下标越界可能是怕初学者把数组下标当成是以0开始的吧别的情况别不回去检测和处理当我输入的值大于等于11程序都不会报错。 以上是在VC6.0的运行结果VS2013不同VC6.0里报错出现在输入值为11时当输入12时也会报错而输入10时并不会报错。 这是因为VC6.0里认为当引用数组元素时若数组的下标比数组的元素个数大 1 或大 2时下标越界,。而对于其余的情况不予检测。 而在LinuxCentOS6.5里面运行时就是我们开头说的那种下标越界的情况不管你下标咋越界我的编译器都不会对数组下标做边界检查。
2、 内存溢出
#define _CRT_SECURE_NO_WARNINGS 1#include stdio.h int main()
{int count[100], i;for (i 0; i 100; i){count[i] 1;}system(pause);return 0;
}
数组定义为count[100],则数组共有100个元素。这里初始化时for循环一共循环了101次所以是要给数组初始化101个元素的值而数组只有100个元素这样就导致了内存溢出。 VS2013环境下编译链接运行都可以但会抛出一个错误—数组内存溢出。 这是在VC6.0环境下编译链接运行都可以但同样会出错。 这是在LinuxCentOS6.5环境下编译链接运行都可以但程序停不下来关闭终端时可以看到程序仍在进行。
因此虽然数组在C语言中是个很强大的东西但在应用时一定要注意千万不要出现下标越界的情况因为这样会造成不可想象的错误。比如下标越界那个例子中的 i 我定义为10当在VS2013环境下我输入的下标值为12在输出arr[12] 20 的同时会把i的值也改为20VS中定义的两个变量分配内存时会在两个变量的内存空间之间隔出两个空间空间大小为整形大小这样别处再用到 i 时 会得到一个错误的 i 的值可能机会导致一连串的错误致使结果与预期相差甚远。同时在初始化数组时要注意不要初始化的元素个数不要超出了定义时的个数。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913347.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!