Указатель - это переменная. У переменной есть адрес (место), по которому она расположена в памяти, и значение - адрес другой переменной, на которую она указывает.
Так вот, указатели (т.е. переменные) - разные, а указывают на одно и то же место в памяти.
Пусть у нас есть две разные ячейки с номерами, например, 9 и 12. Никто ведь нам не запрещает записать в обе эти ячейки одно и то же число, например, 7. Семерка будет и в ячейке с номером 9, и в ячейке с номером 12. Ячейки две, а число - одно и то же. И если тип обеих ячеек - указатель, значит, указывать они обе будут на одну и ту же 7-ю ячейку.
@romansochi
что-то я перестал что-либо понимать. Вы же писали, что изменили эти три переменные:
И где это в новом коде?
Блин , ну хоть убейте не пойму почему на одно тоже , если они разные и я сам их никак не заставлял указывать на одно место… Вот этот момент и не понятен… я понимаю что при желании можно заставить их ссылаться наодно место , но я то не заставляю… наоборот … почемуже так
непонял… вверху и есть обьявление - только что просмотрел…
А что им может помешать? Вы можете вообще один указатель другому присвоить обычной операцией присваивания.
Неправда. Он о таких вещах обязательно предупреждает. Если не было сообщений, значит у Вас IDE работает в “блондиночном режиме”. Исправьте немедленно! И впредь всегда настраивайте при установке новой версии.
Разработчики IDE видят своим целевым пользователем беременную доярку - блондинку. И потому, просто выключили показ всех предупреждений компилятора, чтобы девочек не пугать, а то в их положении это опасно.
Если Вы не беременная доярка, то Вы должны зайти в “Настройки” и восстановить сообщения. Примерно, как на рисунке:
Убедитесь, что появились.
А…Вы про указатели… Я написал тот код без исправлений и шаманств который у меня не работает и именно он меня интересует !!! А он с указателями.
А кто же их заставил? Пушкин? Мировой империализм? Большевики с евреями?
Вы же им присвоили указатели на одну и ту же константу!
Я Вам предлагал научить понимать такие вещи, Вы не отреагировали. Так, научить?
Да, в этом Вы абсолютно правы, он действительно стал предупреждать … Правда если теперь привести к тому что он хочет… ошибок нет , но результат неверный
Что Вы понимаете под
?
Пожалуйста обьясните где одна и таже … TBuf =“000” и MBuf=“00” Имена разные значения разные или строка 000 & 00 тождественны ?
char* TBuf=(char*)"000";
char* MBuf=(char*)"00";
char* SBuf=(char*)"00";
float Temperatura=231.23;
void setup() {
Serial.begin(9600);
int tttt=int(Temperatura);
TBuf[0] = '0' + tttt / 100;
TBuf[1] = '0' + (tttt % 100) / 10;
TBuf[2] = '0' + tttt % 10;
tttt=22;
MBuf[0] = '0' + (tttt / 10);
MBuf[1] = '0' + tttt % 10;
SBuf[0] = '0' + (tttt / 10);
SBuf[1] = '0' + tttt % 10;
Serial.println(TBuf);
Serial.println(MBuf);
Serial.println(SBuf);
// put your setup code here, to run once:
}
Вы что имеете в виду? С указателями - это вот так, что ли?
Вы прочитали 50 сообщений и до сих пор не поняли, что так работать не будет?
Вот это я как раз таки и понял… А вот почему- нет!!! Не будет так не будет не велика проблема… НО то что для меня нет ответа может опять вогнать в ступор на другом коде…
Хрена-се! Это Вы вот это
char* TBuf=(char*)"000";
[/quote]
Вы называете
Мдааа…
Вы ничего не привели, Вы просто сказали, дословно: “Плюй на то что там константа и считай, что переменная”. Понимаете?
Не то чтобы этого совсем нельзя было делать. Можно, но только в том случае, если точно понимаешь, что делаешь (опять анекдот про зайца и ворону"). А если использовать такие преобразования без понимания “что делаешь”, то начинаются проблемы как у Вас.
Ну, “в хвостах” - да. Это просто одна и та же область памяти.
В последний раз предлагаю научить Вас исследовать и понимать такие вещи. Больше не буду предлагать, сами разбирайтесь.
Вы написали кривой код и теперь хотите, чтобы он “без исправлений” заработал? Вы здоровы вообще?
Шаманством вы что называете, вот такое описание переменных:
эээ. если я правильно понял то компилятору не понравилось то что я пытаюсь использовать строковую константу в виде указателя на строку символов. А что это строковая констатнта его заставляет думать присваивание именно строки… Именно это я и попытался исправить . видимо я не правильно понял его желание …
Я не понима Вас… Я ОТкрытым текстом говорю , что мой код кривой и не говорю что он идеален. Я как раз и хочу его исправить , вот только незнаю как.
char TBuf = “000” , а так если Вы посмотрите выше предложили сделать именно Вы , для прорбы…![]()
Обьясняю на пальцах, если что - “старшие” поправят
Вот эта строка
char TBuf[] = "000";
означает отвести в памяти место для массива символов, инициировать массив строчкой “000” и присвоить переменной Tbuf значение указателя на первый символ массива .
А вот эта строка
char* TBuf="000";
означает "создать указатель на переменную типа символ и присвоить ему значение, указывающее на область памяти, содержащую “000”.
Понимаете разницу? - в первом случае компилятор создаст строчку “000”, а во втором - сначала посмотрит, нет ли рядом уже готовой и только если нет - сделает новую. Потому что в первом случае вы заказали создать массив символов и создается именно он, а указатель получается как приложение. А во втором вы заказали именно указатель, а на что он будет указывать - дело десятое.
Поняли теперь, почему
все три указателя указывают на одно и тоже? - Первый создает строку, а два других цепляются к ней, потому что она уже есть!
