Подскажите нормальную книгу по С++, в которой нормально описаны указатели и операции с ними.
Читаю. Пока понятно. Ссылка не открывается. Возможно, шалит мой провайдер.
Это шалит сам ресурс (UA). Используйте ВПН
А нормально - это как? Или “ненормально”? Вы прочитали десяток книг и не нашли такую, где бы были понятно описаны указатели?
А что там в общем то описывать ?
Указатель , это объект хранящий адрес другого объекта.
Для изменения значения хранящегося по адресу используется разыменование.
Вся путаница обычно из за двунаправленного использования знака ‘*’ (Астерикс).
Нужно понимать что он используется и для объявления и для разыменовывания указателя.
Первый раз для объявления, все последующие для разыменовывания.
Если к указателю обращаться, напрямую (без разыменовывания), то тогда работать будешь с адресом, а не с тем , что лежит по этому адресу.
Адрес указывает на первый байт объекта.
int *a; //при создании указателя выделяется память в размере требуемом его типу
//зависит от архитектуры в данном случае 2 байта (16 бит)
void setup(){
}
void loop(){
*a=25;//при разыменовывании указателя, работаем с тем, что лежит по адресу
//в данном случае записываем значение 25
//теперь по адресу 'a' лежит значение 25
}
вопщем, если ты наркоман проклятый, и тебе вдруг понадобился хаш, ты знаешь, что во дворе дома 5 по улице Ленина сидит на лавочке мужик, и тебе надо к нему. Подходишь, и он тебе даёт грязную бумашку, на которой накарябано “кв.103”, идёшь туда и получаешь желаемое. Так вот, указатель - это мужик на лавочке.
если мужика инкрементировать - что получится?
кв. 104
Закавыка пока в строке
int* a;
И в чем же там «закавыка»?
можно попробовать порасставлять виртуальные скобки
int * a;
(int*) a // <a> без звездочки - указатель (int*)
int (*a) // <*a> со звездочкой - int
неправильно
int *a, b, *c;
You did not clue what I meant, the braces are VIRTUAL
Скобки использованы ИСКЛЮЧИТЕЛЬНО чтобы отделить логические группы.
А так да, звездочка всегда относится к переменной, а не к типу.