Массивы,указатели
- Войдите на сайт для отправки комментариев
Чт, 16/06/2016 - 14:11
Что я делаю не так? Ниже dummy код, но не понятно, почему не компилируется. Покажите пальцем, пожалуйста.
byte buf1[200],buf2[200]; bool flag=true; byte ptr1,ptr2; void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: byte *ptr_buf; byte *ptr_ptr; if (flag) { ptr_buf=buf2; ptr_ptr=ptr2; !flag; } else { ptr_buf=buf2; ptr_ptr=ptr2; !flag; } }
Пардон, есть ошибки, вот исправленный вариант:
почему не компилируется. Покажите пальцем, пожалуйста.
Компилятор сказал Вам почему он не захотел компилировать. Вы от нас это скрыли! Хотите, чтобы мы сами компилировали? А оно нам надо? Может всё же покажете сообщение-то?
Не стоит указателю присваивать значение переменной (строки 16, 22). Ищи как присвоить указателю адрес переменной, это пишется несколько по-другому. Строки 17 и 23 можете спойкойно удалить, значение выражения не присваивается, потому будет выброшено компилятором. Представь себе, что ты взял в магазине товар, но подошел платить не на кассу, а к стенке, протягиваешь деньги, а их никто не берет, потому что некому брать. Так же и здесь, инвертировал значение, но никуда это не записал. В строках 18, 24 определись, что нужно инкрементировать значение байта или значение указателя. Срочно читать, как увеличить/уменьшить указатель. Кроме того в этих же строках ты берешь значение указателя и индексом берешь другой указатель. Другими словами: массив[указатель]. В массиве обращение к элементам производится по индексу, т.е. указывать в квадратных скобках указатель - некорректно, потому что индекс выйдет за пределы массива. Нужно просто: массив[индекс], где индекс - обычная переменная с типом int, byte, но не как не byte *. Да, простой совет, не называй переменную именем ptr и т.п. потому что всё-таки ptr === pointer (указатель), потому что это введет того, кто будет смотреть этот исходник в удивление. Это я про переменные ptr1, ptr2. Еще, ptr_ptr звучит неоднозначно. Указатель на указатель? Тогда неправильно описано, а если это не указатель на указатель, то неправильно названо. Название переменных должно быть читабельным, чтобы через полгода посмотрел исходник и не нужно вспоминать, что за переменная "a" или переменная "b". Исключением могут быть переменные, используемые в цикле for.
И таки да, нужно смотреть сообщения компилятора. Потому что оно (сообщение) говорит о том, какая ошибка. Текст ошибки гуглится и ошибка исправляется, так что вперед и с песней.
PS ЕвгенийП, sorry, если что, я тут размялся красненьким.
ОК, специально не привел ошибок компилятора, т.к. видно будет, кто разбирается, а кто поболтать. Как бы то ни было, комп ругается
sketch_jun16a.ino: In function 'void loop()':
sketch_jun16a.ino:16:10: error: invalid conversion from 'byte {aka unsigned char}' to 'byte* {aka unsigned char*}' [-fpermissive]
ОК, специально не привел ошибок компилятора, т.к. видно будет, кто разбирается, а кто поболтать.
А-а-а, так это было тестирование нашей квалификации? А не пойти Вам НА? Решайте свои проблемы сами, экзаменатор, мля.
kisoft,
надеюсь на Вашу солидарность. Мальчик больно много на себя берёт. Пусть сам со своим компилятором воюет.
Нет, я же объяснил, зачем так сделал. За путевку благодарить не буду, верну ее вам, пожалуй. Заметьте, как точно метод работает :) и не обижайтесь на СВОИ домыслы относительно меня.
Kisoft по существу ответил, за что ему спасибо.
mal333, в последнее время очень часто стали появляться люди, которые задают вопрос, но после ответа начинают хамить, а мне это неприятно. Лучше я сразу честно покину эту тему, пока не началось. Удачи.
Несколько удивлен реакцией. Вроде как наоборот, благодарил за отклик по существу вопроса.. Или вы на "мысль понятна" отреагировали? Возможно, я не очень ясно выразился, я имел в виду что надеюсь что подробно изложил свои затруднения, из которых можно понять, что не так. Мне печально узнать, что хамство распространилось настолько, что темы закрываются, даже не начавшись.
потому что у тебя фигня написанна, вот и не компилится, ошибку видно сразу и внизу, проверим насколько ты компетентен)) если найдешь ))
да и это !flag интересное решение...
О, очередной малолетний гамна прилез, с понтами выше крыши, веселуха! Почитать про синтаксис языка - не, не знаем! Выложить говноскетч и с гонором "экзаменовать" - это да, мы можем!
Честно сказать, я хотел написать и указать на ошибки, но решил выждать время, и, о чудо! - чуйка не подвела (ттт). Теперь всякое желание отпало как класс.
Вьюнош - откройте книжку по С++ и читайте, там всё есть.
Да уж, голова вечером лучше варит, чем ночью :)
Всем спасибо за каменты, ярлыки и путевки. Надеюсь, это улучшит вашу жизнь. DIYMan- берегите себя, когда желание как класс отпадает- опасный признак ;)
так тебя же не кинули совсем, просто проверяли компетентность ))) обращайся еше ))