我遇到了存储在数组中的问题

时间:2017-07-16 19:43:49

标签: c++ arrays

我有以下代码,我很困惑为什么编译器显示的元素多于数组大小。

# include <iostream>
using name space std;

int main() 
{
    int arr[]={1,2,34,5};

    for(int i=0; arr[i]; i++)
    {
         cout << arr[i] << endl;
    }
}

3 个答案:

答案 0 :(得分:1)

你离开阵列的末尾是因为你的条件是&#34;元素具有非零值&#34;而不是&#34;索引不在数组的末尾&#34;。

for (int i = 0; i < 4; ++i)

我强烈建议您使用标准库容器来解决此类问题,例如std::vector,因为您可以使用简单的迭代器。这些因为像for_each那样使用迭代器遵循简单模式之类的东西变得更难绊倒。

答案 1 :(得分:0)

您可以尝试这种方式:

#include <iostream>
using namespace std;

int main()
{
    int arr[]={1,2,34,5};
    int n = sizeof(arr)/sizeof(arr[0]);

    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<endl;
    }
    return 0;
}

答案 2 :(得分:0)

该行

for(int i=0;arr[i];i++)

相当于

for(int i=0;arr[i] != 0;i++)

您已初始化arr,以便有效数组索引中数组的所有元素都不为零。因此,arr[i] != 0 true的唯一方法是使用越界索引访问arr。但是,这是导致未定义行为的原因,这是您在程序中看到的。

如果您有权访问C ++ 11编译器,请使用范围 - for循环来访问该数组的所有元素。

for ( auto el : arr )
{
   // Use el
}

如果您无法访问C ++ 11编译器,请在访问数组之前使用数组的大小来中断循环。

size_t size = sizeof(arr)/sizeof(arr[0]);
for ( size_t i = 0; i < size; ++i )
{
   int el = arr[i];
   // Use el
}