Цитата:
Сообщение от hiphopdjedai
Ну не знаю если вывести содержимое массива на экран то пустые ячейки выводятся как большое отрицательное число. Ну знаете как если бы я просто инициализировал переменную: int x; и потом вывел не положив никакого элемента std::cout<<x; Поэтому не факт что там будут нули.
|
Вообще-то, строго говоря, инициализацией является присвоение значения при определении объекта. Поэтому в приведенном ниже фрагменте кода
int a[] = { 1, 2, 3};
массив
a инициализируется.
А в этом фрагменте
int a[3];
a[0] = 1; a[1] = 2; a[2] = 3;
происходит
присвоение значений элементам неинициализированного массива.
Я под инициализацией понимал значение этого слова в его строгом смысле. Хотя распространено и такое его употребление, когда речь идет о присваивании значений объекту уже
после его определения.
Если вы инициализируете массив при его определнии с помощью списка инициализации, то все элементы массива, которым не хватило инициализаторов, будут инициализированы 0.
То есть следующие два определения эквивалентны.
int a[3] = { 1, 0, 0 };
и
int a[3] = { 1 };
Если вы просто объявите массив не со статическим распределением памяти, то он будет содержать мусор. То есть если вы объявите локальный массив
int a[3];
то он может содержать любые значения в том числе и большие отрицательные числа, как вы пишите. То есть его содержимое не предсказуемо, а зависит от того, что хранилось в памяти на момент ее выделения для массива.
Поэтому вам просто нужно установить какое-то соглашение, при каком значении элемента массива этот элемент считается неинициализированным.
Просто порассуждайте логически. Вы говорили, что ваш массив содержал какие-то большие отрицательные числа. И это являлось следствием, как вы считаете. что массив не был проинициализирован. Но если эти числа могли содержаться в элементах массива, то почему программисту запрещено или не возможно присвоить эти значения элементам массива при его инициализации?