首页 > 解决方案 > 获得意想不到的价值

问题描述

我正在玩数组,当我这样做时,我期待着IndexOutOfBound
程序仍然运行并给出输出54

额外的数字来自哪里?
如何避免这类索引问题?

#include <iostream>
int main(){
    int array[] = {1,2,3,4,5,6};
    int total;
    for(int i = 0 ; i<=7 ; i++){
        total += array[i];      
    }
    std::cout << total;
    return 0;
}

标签: c++increment

解决方案


C++ 不会进行任何检查以确保您的索引对数组的长度有效。就像上面的 churill 笔记一样,超出范围的索引是未定义的行为。例如,在您的问题中, array[6] 的值是存储在您的内存中第 6 个元素存在的位置的任何值。在您的情况下,这是一个随机值,例如来自另一个变量。

虽然很少见,但 C++ 也允许您使用负索引,但会产生类似的不良结果。


推荐阅读