热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

循环中的数组行为

如何解决《循环中的数组行为》经验,为你挑选了1个好方法。

我是这个论坛的新手,我想问为什么我这个阵列的行为与我预期的不同?

int main() {
    int array[8]={3,5,5,6,6,5,3,5};
    for(int i=-1;i<=8;i+=2) {
        std::cout<

输出结果为:35637

我不知道为什么结果是这样的,尤其是索引8中的最后一部分,即值为7 ...



1> Baryons for ..:

您的数组有8个条目,具有以下位置:

array[8] = {3, 5, 5, 6, 6, 5, 3, 5}
            ^  ^  ^  ^  ^  ^  ^  ^
 (position) 0  1  2  3  4  5  6  7 

你的循环从每次开始i = -1,直到i <= 8,并且i每次增加2,因此i取值-1,1,3,5和7.因为你正在访问元素array[i+1],所以你要求位置0处的元素, 2,4,6和8.但是没有位置8,所以这是一个错误,程序的行为通过包含它而变得不确定,这意味着即使在与非法调用本身不同的地方,任何事情都可能发生(这显然是非常糟糕,必须始终避免).

在您的情况下,您的程序似乎正在读取数组结束后的内存中的任何内容.你偶然得到了一个7 - 那里可能有任何东西,实际上你的程序甚至可能不被允许访问那个内存,在这种情况下它会因分段错误而崩溃.


"所以这实际上正在读取阵列结束后内存中的任何东西",这是粗心的.行为未定义; 而已.例如,实现可能会限制对最后一个元素的越界访问; 特别是考虑到指针没有衰减.
@Bathsheba我同意*可能*发生任何事情,但我认为很清楚*这里发生的*是一些额外的垃圾内存正在从数组末尾读取.我认为提问者描述他们为什么观察他们所做的行为会更有帮助,而不是这个程序在抽象机器上运行的行为.不过,你当然是正确的,我会编辑以使UB更清晰.
虽然我们在这里,但我想指出_"并且程序的行为在之后变得不确定"_是不正确的.整个程序的行为是未定义的(技术上没有"事后") - 编译器可以自由地假设这不会发生,所以它可能会[非常意外的优化](https://blogs.msdn.microsoft.com/oldnewthing/ 20140627-00/p = 633).是的,这不会发生在这里,但它需要警惕.
推荐阅读
  • Igotthiscode(IknowitsinSpanishIcantranslateifneeded)wheretheygivemethefunctionS ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 数据结构-图详解(图基本概念、图的存储结构及C++实现)
    本文主要介绍关于数据结构,c++,图论的知识点,对【数据结构-图详解(图基本概念、图的存储结构及C++实现)】和【数据结构图的存储结构代码】有兴趣的朋友可以看下由【NUC_Dodamce】投稿的技术文 ... [详细]
  • 字符串的题目用库函数往往能大大简化代码量介绍几个常用的C的字符串处理库函数strtok()原型char*strtok(chars[],constchar*delim); ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 如何用Vscode和 Visual stdudio配置C++环境
    这篇文章主要讲解了“如何用Vscode和Visualstdudio配置C++环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
author-avatar
胸膛舒畅_736
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有