Как работает данный код

Указатель - это переменная. У переменной есть адрес (место), по которому она расположена в памяти, и значение - адрес другой переменной, на которую она указывает.
Так вот, указатели (т.е. переменные) - разные, а указывают на одно и то же место в памяти.
Пусть у нас есть две разные ячейки с номерами, например, 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” , а так если Вы посмотрите выше предложили сделать именно Вы , для прорбы…:slight_smile:

Обьясняю на пальцах, если что - “старшие” поправят

Вот эта строка

char TBuf[] = "000";

означает отвести в памяти место для массива символов, инициировать массив строчкой “000” и присвоить переменной Tbuf значение указателя на первый символ массива .

А вот эта строка

char* TBuf="000";

означает "создать указатель на переменную типа символ и присвоить ему значение, указывающее на область памяти, содержащую “000”.

Понимаете разницу? - в первом случае компилятор создаст строчку “000”, а во втором - сначала посмотрит, нет ли рядом уже готовой и только если нет - сделает новую. Потому что в первом случае вы заказали создать массив символов и создается именно он, а указатель получается как приложение. А во втором вы заказали именно указатель, а на что он будет указывать - дело десятое.

Поняли теперь, почему

все три указателя указывают на одно и тоже? - Первый создает строку, а два других цепляются к ней, потому что она уже есть!