Инициализация массива

 

Я изучаю массивы из руководства mql4, и я наткнулся на тему, с которой у меня проблемы; инициализация массива вызывает легкое недоумение Я не понимаю следующее утверждение

"

Инициализация массива


Массив может быть инициализирован только константами соответствующего типа. Одномерные и многомерные массивы инициализируются одномерной последовательностью констант, разделенных запятыми. Последовательность заключена в фигурные скобки:

int Mas_i[3][4] = { 0, 1, 2, 3,   10, 11, 12, 13,   20, 21, 22, 23 };
 
double Mas_d[2][3] = { 0.1, 0.2, -0.3,    -10.2, 1.5, 7.0 };
 
bool Mas_b[5] = { false, true, false, true, true }

"

Меня не смущает тот факт, что массив может быть инициализирован только константами соответствующего типа, но меня смущает концепция инициализации массива и тот факт, что одномерная последовательность может инициализировать многомерный массив.

Меня смущает следующее.

"

В инициализируемой последовательности одна или несколько констант могут быть опущены. В этом случае соответствующие элементы массивов числового типа инициализируются нулем, элементы массивов строкового типа инициализируются строковым значением "" (кавычки без пробела), т.е. пустой строкой (не путать с пробелом). Следующая программа выводит значения массивов, инициализированных последовательностью с пропуском некоторых значений (скрипт arrayalert.mq4):

//--------------------------------------------------------------------
// arrayalert.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
  {
   string Mas_s[4] = {"a","b", ,"d"};           // String array
   int Mas_i[6] = { 0,1,2, ,4,5 };              // Integer type array
   Alert(Mas_s[0],Mas_s[1],Mas_s[2],Mas_s[3]);  // Displaying
   Alert(Mas_i[0],Mas_i[1],Mas_i[2],Mas_i[3],Mas_i[4],Mas_i[5]);
   return;                                      // Exit start()
  }
//--------------------------------------------------------------------

"

В конечном итоге я не понимаю концепцию инициализации массивов.

 

Вы ведь понимаете концепцию массивов? Переменная с несколькими индексами?

Все, что делает инициализация, это устанавливает начальное значение для всех индексов.

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

если вы хотите, чтобы начальное значение было одинаковым для всех индексов, вы можете ввести значение один раз, как в этом примере,

int myarray[100]={0};   //initializes all 100 indexes to value zero

или,

int myarray[100][5]={-1}; //multi dimensions, initializes all 500 indexes to -1.

Также имейте в виду, что в книге по mql4 есть некоторые ошибки. Я думаю, что во втором примере, когда говорится,

"В инициализированной последовательности одна или несколько констант могут быть пропущены. В этом случае соответствующие элементы массивов числового типа инициализируются нулем, элементы массивов строкового типа инициализируются строковым значением "" (кавычки без пробела), т.е. пустой строкой (не путать с пробелом)."

и затем показывает этот пример,

string Mas_s[4] = {"a","b", ,"d"};           // String array

вероятно, так и должно было быть:

string Mas_s[4] = {"a","b","","d"};           // String array
также где-то в книге говорится, что "все массивы по умолчанию имеют статический тип", что также является ошибкой, они, как и другие переменные, не статические, если не определены как статические, за исключением случаев, когда они являются глобальными.
 
SDC:

Вы ведь понимаете концепцию массивов? Переменная с несколькими индексами?

Все, что делает инициализация, это устанавливает начальное значение для всех индексов.

Если вы хотите, чтобы начальное значение было одинаковым для всех индексов, вы можете ввести значение один раз, как показано ниже

int myarray[100] {0} //инициализирует все 100 индексов нулевым значением.


Справа

Я все еще немного запутался.

Итак, если у меня есть массив

Double myarray[100]

Я объявил тип массива (double), имя массива (myarray) и количество индексов (100).

Можно ли присвоить значение массиву MyArray, используя Double myarray[100] = {1, 2, 3, ....}, чтобы myarray[1]=1 и myarray[2]=2 и так далее.

До сих пор я создавал массивы только для захвата значений из циклов, и даже тогда массив использовался очень свободно.

Спасибо, указание на эту ошибку прояснило небольшой вопрос, который у меня возник.

 

Первый индекс массива равен нулю, поэтому если вы сделаете,

double myarray[100] = {1,2,3 .....};

то получится, myarray[0] == 1, myarray[1] ==2 и т.д.

 

Ах, да, хорошо.

Что если у меня есть многомерный массив

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} (извините, я заметил, что ранее использовал целые числа).

Как я могу вызвать значение?

 

вы называете его как myarray[index,index]; или myarray[index][index]; делает то же самое.

val = myarray[2,2]; //получает значение из массива индекс 2,2 помещает его в val.

Print(myarray[2,2]); //печатает его

Alert(myarray[2][2]); //оповещает об этом

 

Каким будет значение?

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}

Myarray[1][3]=?

 
ноль, потому что вы ничего ему не приписывали
 

у вас есть массив 3 x 4

double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} ;

он будет заполнен следующим образом

Myarray[0,0] = 0.1;

Myarray[0,1] = 0.2;

Myarray[0,2] = 0.3;

Myarray[0,3] = 0.4;

Myarray[1,0] = 0.5;

Myarray[1,1] = 0.0;

Myarray[1,2] = 0.0;

и т.д.

 
Как массив array[0,0] имеет значение, которое было объявлено для Myarray[3][4]?
 

Я сейчас в тупике...

Разве Myarray[3][4] не многомерный, если да, то почему я могу вызывать значения только изменяя значение одного из измерений?

Причина обращения: