![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Поясните в чем разница и заодно что такое символьный массив в МКЛ ? ;)
https://book.mql4.com/ru/basics/types
ЗЫ если для Вас это новость, поскажу в МКЛ нет такого типа ;).... Так что там с массивами ?
Я вам и не говорил что он есть.
Я пояснил ваше заблуждение:
Чтобы существовал элемент с номером 2 размерность массива должна быть не менее 3-х.
а это тогда что ниже ? ! но хотелось бы вытащить без глобальных
double t1=1;
double t2=1;
int start()
{
double myMap1 [2];
myMap1 [0]=t1;
myMap1 [1]=t2;
myMap1 [2] = My_function( );
Alert (t1); Alert (t2);
return(0);
}
double My_function()
{ t1 =10;
t2 =20;
double myMap2 [2];
myMap2 [0]=t1; Alert (t1) ;
myMap2 [1]=t2; Alert (t2) ;
return (myMap2[2]);}
Как я понял. Товарищ хочет всем элементам массива присвоить значения
Вернуть весь массив оператором return невозможно?
int array[2];
Я могу обращаться к элементу с индексом 2 хоть 1000...........................N раз.
char array[2];
А тут последним должен быть символ конца строки(\0).
Правда, возможно в mql4 такого правила нет, поэтому и тут я спокойно обращусь к array[2] =)
Не можете: в большинстве реализаций вызовет падение программы. Перечитайте справку и, если для Вас новость, свойства массива от типа элементов не зависит. В С (в паскале, кстати не так ;) ) массив чар от строки отличается интерпретацией и наличием символа конца строки и, если Вы сами не позаботитесь о распознавании символа конца строки, то получите проблему (читайте руководства по С). Чтобы не было проблем под этот символ нужно выделять память. То есть строку из 2-х символов можно хранит в массиве типа чар, но размерности на единицу больше.
Удачи.
Я вам и не говорил что он есть.
Я пояснил ваше заблуждение:
Чтобы существовал элемент с номером 2 размерность массива должна быть не менее 3-х.
Это не заблуждение. Выше объяснил почему - повторю еще раз: ДЛЯ СИМВОЛА КОНЦА СТРОКИ НУЖНО ОТВОДИТЬ ПАМЯТЬ или работать с этим массивом не как со строкой (то есть не до символа конца строки) а как с обычным символьным массивом - не путайте работу менеджера памяти со стандартами языка.
Кстати, такое впечатление, что опыта работы на С (не на С++, а именно на С ) у Вас нет. Иначе Вы вряд ли путались бы с адресной арифметикой ;). Правда в МКЛ это не нужно.
Удачи.
То есть строку из 2-х символов можно хранит в массиве типа чар, но размерности на единицу больше.
Браво. В языках высокого урвоня так и есть.
Поэтому и говорю, что путаете символьный с любым другим.
И никогда у меня обращение к элементу 2 в массиве типа array[2] ошибки не давало. Одумайтесь
Вернуть весь массив оператором return невозможно?
Вернуть нельзя, но можно передать по ссылке
То есть строку из 2-х символов можно хранит в массиве типа чар, но размерности на единицу больше.
Браво. В языках высокого урвоня так и есть.
Поэтому и говорю, что путаете символьный с любым другим.
И никогда у меня обращение к элементу 2 в массиве типа array[2] ошибки не давало. Одумайтесь
Это на МКЛ не дает ошибки поскольку здесь свой менеджер памяти (это понятно что такое ? ). Попробуйте на С - посмотрим на результат. Кстати компилятор в большинстве случаев ошибку не выдает. Ошибки могут возникнуть на этапе расчетов, поскольку сохранение значений по адресу не гарантировано, например, при выделении памяти под другой массив.
ЗЫ и это Вы одумайтесь - так программировать нельзя: это потенциальный источник очень трудно вылавливаемых ошибок. Читайте руководства по С - разработчики не раз говорили, что МКЛ построен на принципах С и в непонятных случаях рекомендовали обращаться к его стандартам.
Это на МКЛ не дает ошибки поскольку здесь свой менеджер памяти (это понятно что такое ? ). Попробуйте на С - посмотрим на результат. Кстати компилятор в большинстве случаев ошибку не выдает. Ошибки могут возникнуть на этапе расчетов, поскольку сохранение значений по адресу не гарантировано, например, при выделении памяти под другой массив.
Попробуйте на С - посмотрим на результат.
И снова аплодисменты.
Речь то была о mql4 была, тут никакой ошибки это не вызывает, зачем вы человеку начали что-то о С разъяснять.
Vinin привел код, везде там 2, и все работает.
Считаю спор можно закончить.
Чтобы существовал элемент с номером 2 размерность массива должна быть не менее 3-х.
Относительно mql4 - полнейший бред.