GetSmart 0 8 июля, 2011 Опубликовано 8 июля, 2011 (изменено) · Жалоба .. в случае динамичесого массива, созданного через calloc/malloc это точно будет не так. Потому как это совершенно разные вещи. Динамического массива в виде идентификатора не существует, существует указатель на него или просто пустой указатель. А это уже совсем другая история. Адрес функции, кстати, тоже можно брать через амперсанд, и у неё к сожалению или счастью нет индекса. UPD: Т.е. запись &abc просто нелогична, ну как получить адрес адреса. Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична. Т.к. результат - всегда адрес. И глаз программера этот амперсанд так же примечает. Изменено 8 июля, 2011 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Потому как это совершенно разные вещи.Но вот именно поэтому в C++ фокус с ссылкой на адрес статического элемента уже не прокатит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба void *p; } Замените КАК ЭТО СДЕЛАНО В ПЕРВОИСТОЧНИКЕ: u16 *p И компилятор ответит, что он думает "Чему равен p" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична.Это очень стремная радость. В один прекрасный момент решат, что это не "по фен-шую" и количество головной боли у тех, кто пользуется подобными недокументированными фичами будет весьма велико. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 8 июля, 2011 Опубликовано 8 июля, 2011 (изменено) · Жалоба Замените КАК ЭТО СДЕЛАНО В ПЕРВОИСТОЧНИКЕ: u16 *p И компилятор ответит, что он думает "Чему равен p" Адресу массива, не сомневайтесь. Но согласитесь, на УЖАС, УЖАС, УЖАС это не тянет. Так, мелкое хулиганство :) Причём меньшее, чем не посылка NAK в протоколе I2C. Изменено 8 июля, 2011 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Это очень стремная радость. В один прекрасный момент решат, что это не "по фен-шую" и количество головной боли у тех, кто пользуется подобными недокументированными фичами будет весьма велико. А самое главное зачем писать неправильную и более длинную конструкцию char abc[10]; char *p = &abc; вместо короткой и правильной char abc[10]; char *p = abc; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична. Т.к. результат - всегда адрес. И глаз программера этот амперсанд так же примечает. Хвала Аллаху, что у компиляторописателей голова растет не из ануса, посему на это: u16 abc[10]; u16 *p; main() { p = &abc; ... } компиляторрописатели IAR: Error[Pe513]: a value of type "u16 (*)[10]" cannot be assigned to an entity of type "u16 *" а это для разгообразия PowerCraft: (139): operands of = have illegal types `pointer to u16' and `pointer to array 10 of u16t' Реагируют посылкой в анус того, кто так пишет. Адресу массива, не сомневайтесь. Разуваем глаза и смотрим на вышенаписанное. Но согласитесь, на УЖАС, УЖАС, УЖАС это не тянет. Так, мелкое хулиганство :) Не соглашусь, однако. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 8 июля, 2011 Опубликовано 8 июля, 2011 (изменено) · Жалоба Хвала Аллаху, что у компиляторописателей голова растет не из ануса, посему на это: ... Реагируют посылкой в анус того, кто так пишет. Но всё-таки она вертится!? Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент. Чтобы не париться, его всегда можно присвоить нетипизированному указателю. И это работает не только с массивами, но и с записами, юнионами, функциями и возможно ещё что упустил. Очень интересная новость после стольких лет... Изменено 8 июля, 2011 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба В данном случае массив объявляется внутри функции. Мне нужно чтобы массив был глобальным, он потом используется в другой функции. Если нужен глобальный, то объявляйте максимально возможного размера и не парьтесь. Это будет самый простой и надёжный вариант. Он гарантирует, что памяти хватит на самый большой шрифт, и при этом не использует динамического распределения памяти. Ведь вам в любом случае нужно иметь память под самый большой шрифт, пусть она сразу и будет выделена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба вместо короткой и правильной Более длинная и что важно, тоже правильная конструкция: char *p = &abc[0]; может быть применена для подчеркивания того факта, что abc это массив. Иногда такое бывает удобно при быстром чтении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Если нужен глобальный, то объявляйте максимально возможного размера и не парьтесь. Это будет самый простой и надёжный вариант. Он гарантирует, что памяти хватит на самый большой шрифт, и при этом не использует динамического распределения памяти. Ведь вам в любом случае нужно иметь память под самый большой шрифт, пусть она сразу и будет выделена. Ну ну. Сегодня шрифт такой, завтра шеф (заказчик) запросит другой. Ну хоть проверку на размерность массива вставьте! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Но всё-таки она вертится!? Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент. Что значит "вертится" и "является адресом", если компиляторы ВЫВАЛИВАЕТСЯ с ошибкой и соответственно НЕ генерят никакого кода? Кто здесь пытается вертеться, как уж на сковородке, видно невооруженным взглядом :(. И это работает не только... Это не работает. Как там было у Задорнова - "Пива нет. СОВСЕМ нет!" - СОВСЕМ не раболтает. О чем я сразу и написал увидя этo: uint16_t Buffer[50]; uint16_t *ptr_buffer; ..... ptr_buffer = &Buffer; Именно ЭТО увидел и именно об ЭТОМ а не чем-то другом написал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andron86 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Указатель лежит в памяти. Адрес указателя - это адрес этой памяти. :-))) Цитата из Вашей ссылки Очевидно существует очень тесное соответствие между ин- дексацией и арифметикой указателей. в действительности ком- пилятор преобразует ссылку на массив в указатель на начало массива. В результате этого имя массива является указатель- ным выражением. Отсюда вытекает несколько весьма полезных следствий. Так как имя массива является синонимом местополо- жения его нулевого элемента, то присваивание PA=&A[0] можно записать как PA = A По моему Вы и zltigo сомневались и учебники читать отправляли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Кто здесь пытается вертеться, как уж на сковородке, видно невооруженным взглядом :(. Это смотря какой вопрос. То, что было изначально у ТС я не утверждал, что компилируется (вообще). Но то, что амперсанд можно применять ко многим объектам, включая массивы, и результат будет предсказуем, то бишь равен адресу объекта - я ещё раз повторяю. Если я уж, то сижу спокойно, в центре сковородки :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба По моему Вы и zltigo сомневались и учебники читать отправляли. Вы это к чему? Там же ниже прямо написано конструкции типа A=PA или A++,или P=&A будут незаконными. Чего вы мне хотели сказать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться