2015-07-26 3 views
-1

У меня есть простой массив в C++, который показывает мне странный результат для значений по умолчанию массива.Простой анализ массива

#include <iostream> 
using namespace std; 

int arr [] = {2,3}; 

int main() 
{ 
    for (int n=0 ; n<10 ; ++n) { 
    cout<< arr[n]<<","; 

    } 
} 

Результат, который я должен получить это 2,3,0,0,0,0,0,0,0,0, но получить этот результат 2,3,0,0,0,0 , 0,0,809998728,32588, может кто-нибудь объяснить мне, почему?

+3

Неопределенное поведение. Вы получаете доступ за пределами массива 2-х элементов. – drescherjm

+2

Что заставляет вас думать, что вы должны получить 1-й результат на самом деле? Вы читаете за пределами массива и это неопределенное поведение. –

ответ

2

Объявите массив следующим образом

int arr [10] = {2,3}; 

В противном случае, когда он объявлен как этот

int arr [] = {2,3}; 

он имеет только два элемента.

В любом случае программа будет выглядеть лучше, если бы она была написана как

#include <iostream> 

int main() 
{ 
    const size_t N = 10; 
    int arr[N] = { 2, 3 }; 

    for (size_t n = 0 ; n < N ; ++n) std::cout << arr[n] << ","; 
    std::cout << std::endl; 
} 
+0

Работает, но не имеет большого значения, может сделать простой int arr [10] = {3,4}; –

+0

@Oana Andone Плохая идея использовать магические числа в цикле. Поэтому лучше объявить именованную константу. Если вы решите изменить размер цикла, цикл будет работать без проблем. –

+0

Вы можете и должны использовать 'begin' и' end', чтобы найти размеры массива в цикле. Также неплохо зацикливаться на 'N', код может быть легко сломан. –

Смежные вопросы