прямое смешение указателя "shar*stroka"
- Войдите на сайт для отправки комментариев
Вс, 20/03/2022 - 07:52
//IDE 1.6.6 // эта конструкция работает (*stroka)--[n]; (*stroka)--[n]; (*stroka)--[n]; (*stroka)--[n]; (*stroka)--[n]; //возвращаем указатель на начало строки Serial.println(stroka[n]); n++; (*stroka)++[n]; (*stroka)++[n]; (*stroka)++[n]; (*stroka)++[n]; (*stroka)++[n]; // тоже работает for (byte w = 0; w < 5; w++) {(*stroka)--[n];}//возвращаем указатель на начало строки Serial.println(stroka[n]); //печатаем строку n n++; for (byte w = 0; w < 5; w++) {(*stroka)++[n];} // а как заставить работать явное смещение, где туплю? (*stroka)[n] = (*stroka)[n] - (*stroka)-5[n]; }
(*stroka)--[n]; - это на какой выставке современного искусства такое показывают?
Указатель или сам декрементируйте или индекс, к нему пристегнутый.
но это же работает.
но это же работает.
Ну, то что оно работает, это не говорит, что написано согласно общепринятым правилам, и читаемо.
Например значение по p[2] это та же самое, что и 2[p] тоже самое, что и *(p+2) - вопрос записи.
Но никто же не использует вариант 2[p].
А в чем , вообще, был вопрос ? Если это урок, то скорее как не нужно писать.
Олег, я не понял Вашей проблемы. Если объясните, то попробую помочь.
Коллеги, обратите внимание, что у ТС не просто символьный массив, а массив массивов.
Поэтому (*stroka)++[n] не такая уж ересь, это всего лишь следующий элемент из массива stroka
Например значение по p[2] это та же самое, что и 2[p] тоже самое, что и *(p+2) - вопрос записи.
Напрасно. Это секретные знания.
А если серьёзно, до такого человек должен сам доходить, когда готов - когда понимает логику синтаксиса и, стало быть, понимает, почему так. Если человеку сказать это, когда он еще не готов и не понимает, он такого может в своих кодах наворотить.
Но никто же не использует вариант 2[p].
Сильно сказано! Встречается.
Олег, я не понял Вашей проблемы. Если объясните, то попробую помочь.
Как правильно синтаксически оформить строку 24 стартового топика чтобы она заработала, или это не возможно. Вопрос чисто из интереса, так как с циклами всё работает.
А что вы хотите получить, можете словами написать?
Как правильно синтаксически оформить строку 24 стартового топика чтобы она заработала
Так вот я именно и не понял, что значит "заработала". Чего Вы от неё хотите? Объясните словами. А то Вы думаете, что все знают чего Вы там хотели сделать? Таки нет :-(
Как правильно синтаксически оформить строку 24 стартового топика чтобы она заработала
Так вот я именно и не понял, что значит "заработала". Чего Вы от неё хотите? Объясните словами. А то Вы думаете, что все знают чего Вы там хотели сделать? Таки нет :-(
заменить цикл в строке 38 поста #2 на такую или подобную операцию, то есть сместить указатель на 5 позиций одним действием.
(*stroka)[n] = (*stroka)[n] - (*stroka)-5[n];
oleg_kazakof,
Вы изумительно умеет объяснять. Для того, чтобы "сместить указатель на 5 позиций" достаточно просто прибавить к нему 5 обычным сложением.
В общем два варианта, или я тупой и не понимаю очевидного, или Вам это не особо и нужно и Вам лень лишнюю строчку написать, может пример привести, чтобы Вас поняли. В любом случае, помочь ничем не могу, т.к. не понимаю что нужно. Объясните - помогу, нет - и суда нет.
Олег, и все таки, опишите что вы пытаетесь получить, так как действия с указателями несколько странные.
Вы гоняете начальный указатель на строку, потом восстанавливаете его в цикле.
Предположительно это можно сделать проще (но не понятно, что нужно), причем несколькими способами.
И с использованием индекса. Думаю что задумка не соответствует написанному.
oleg_kazakof,
Вы изумительно умеет объяснять. Для того, чтобы "сместить указатель на 5 позиций" достаточно просто прибавить к нему 5 обычным сложением.
ЕвгенийП, скетч в посте#1 получает символы с сериал монитора IDE и заменяет на них символы в этом массиве
цикл
for (byte w = 0; w < 5; w++) {(*stroka)--[n];}
двигает указатель в нужную сторону для дальнейшей обработки. всё это работает как нужно.
может это и работает "как нужно, но с точки зрения синтаксиса эта запись - лютый бред, в первую очередь из-за индекса. Надеюсь, вы не будете спорить, что например запись
- единственная на строке - это бессмыслица?
Если да - то обьясните тогда, какую функцию в теле вашего цикла {(*stroka)--[n];} несет [n] ?
вопрос в том как это сделать простым декрементом или инкрементом что то типа такого (*stroka)[n] = ((*stroka)[n] -5)); вот тут я и туплю. как правильно составить эту строку чтобы указатель сдвинулся на 5 позиций.
пока вы не обьясните, куда вы в своем массиве хотите попасть сдвигом на пять - все равно непонятно, что вы делаете, с учетом бредовой записи выше.
Чтобы было понятнее: ваш массив stroka - двумерный. Соответственно если взять аналогию из геометрии - у него два измерения x и y. По оси х тут идут буквы в отдельных строчках, по у - меняются целые строчки. В своем коде вы куда пытаетесь переместится на пять - по х или по у?
Ну, хоть что-то, хотя непоняток осталось гораздо больше, чем стало понятно.
В принципе, как я Вам уже писал, конструкция
в Вашем случае эквивалента
Но это Вам вряд ли поможет, т.к. Вы катастрофически не умеете работать с указателями.
А раз так, то почему бы Вам не уйти от работы с ними напрямую? Объявите Вашу stroka двумерным массивом и работайте с индексами:
В принципе, как я Вам уже писал, конструкция
в Вашем случае эквивалента
Но это Вам вряд ли поможет, т.к. Вы катастрофически не умеете работать с указателями.
Спасибо ЕвгенийП, вот я затупил так затупил. Всё работает.
А массив нужен именно с указателями так как это всего небольшая часть программы, которая печатает на термопринтере кассового аппарата текст набираемый в на экране монитора в IDE.
Но, что самое интересное, при замене цикла на прямой декремент размер используемого флеша и озу НЕ изменился
Но, что самое интересное, при замене цикла на прямой декремент размер используемого флеша и озу НЕ изменился
оптимизатор выкинул бессмыслицу
может это и работает "как нужно, но с точки зрения синтаксиса эта запись - лютый бред, в первую очередь из-за индекса.
Полностью с Вами согласен, я далеко не программист.
Если да - то обьясните тогда, какую функцию в теле вашего цикла {(*stroka)--[n];} несет [n] ?
Спасибо выкинул не нужные [n], всё работает и компилятор перестал писать предупреждения.
пока вы не обьясните, куда вы в своем массиве хотите попасть сдвигом на пять - все равно непонятно, что вы делаете, с учетом бредовой записи выше.
Сдвигом на пять последовательно заполняется массив с экрана монитора IDE, и выводится обратно в монитор.
Спасибо за подсказку про[n].