Объявление переменной

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

Просьба не пинать.
Столкнулся с такой конструкцией
char * t;
...
...
...
t = (* t++);
Для чего нужна звёздочка?
Реклама
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Звездочка если мне память не изменяет это указатель.
Реклама
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

Поясните plz что в данном случае обозначает этот "указатель" и для чего он нужен?
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Сообщение PB_EXPERT »

Как правило, это указатель на начало области памяти (переменная, массив, струкутра и т. д.), но может быть и указатель на процедуру или метку. Это зависит от того, что в этот указатель запишешь.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

Я никак не могу понять значение этой строки.
t = (* t++);
переменной t присваивается значение t++. это понятно. Но звезда зачем?! Это указатель куда? Вообще непонятно.
И в разделе объявления переменных та же история. Что измениться, если звёздочки убрать?
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

Код: Выделить всё

Error: a value of type 'unsigned char' can't be assigned to an antity of type 'unsigned char *'
Не компилится.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

WorkPage писал(а):Я никак не могу понять значение этой строки.
t = (* t++);
переменной t присваивается значение t++. это понятно. Но звезда зачем?! Это указатель куда? Вообще непонятно.
И в разделе объявления переменных та же история. Что измениться, если звёздочки убрать?
я тоже не понимаю, что сия строка обозначает...

t - это указатель на char, т.е. переменная t содержит АДРЕС ячейки, в которой хранится байт-символ.
*t - это так называемое "разименование" указателя, т.е. доступ к данным, на которые он указывает. в вашем случае это обращение к той самой ячейке с символом.
*t++ означает, что сначала будет взято (и использовано) значание из ячейки, а затем указатель (т.е. адрес) будет увеличен на 1.
t = *t++; означает буквально следующее: указателю присваивается значение символа (!!!), а затем значение указателя увеличивается на 1 (!!!). что сие значит - для меня загадка...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Сообщение Murav »

ARV писал(а): t = *t++; означает буквально следующее: указателю присваивается значение символа (!!!), а затем значение указателя увеличивается на 1 (!!!)
Точнее переменной t будет присвоено значение на которое она указывал и переменная t будет увеличена на 1. Порядок этих действий неопределён, поэтому такую конструкцию использовать нельзя(и например a=a++ - 2 - тоже). А вообще данная строка - это скорее всего ошибка.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»