ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1472212 Топик полностью
il-2 (25.10.2024 06:23, просмотров: 123) ответил IBAH на Хрен с ними с буферами, объясните темному, про const char* и char* const.
Вот: 

const unsigned char* const file; //Укахзатель на файл - ты обявил поле структуры file, которую можно инициализировать только при объявлении структуры.

File_t files[4] - Данная структура размещяется в ОЗУ

File_t const files[4] - Данная структура разместится во FLASH (в соответствии со скриптом линкера)

Общее правило для const такое:

- при объявлении локальных/глобальных переменных и полей структур через const такие переменные могут быть инициализированы только в момент объявления, и из них можно только читать.

Это же относится к указателям на const-переменные - по такому указателю можно только читать.

Поэтому обычному указателю нельзя напрямую присваивать указатель на const, ибо у тебя может потом возникнуть преступное желание сделать запись через такой указатель :-)

- при объявлении глобальных (static - тоже с глобальным расположением) переменных через const такие переменные размещаются в отдельных секциях, и линкер их затем размещает во FLASH

Стоит еще отдельно сказать про расположение const в объявлениях переменных:

const char Variable; // Переменная во FLASH

char const Variable; // Переменная во FLASH

Обе записи являются эквивалентными. Однако:

const char *pVariable; // Переменная в RAM

char * const pVariable; // Переменная во FLASH

Это совершенно разные записи. Поэтому, чтобы не путать себя и других предпочтительнее из записей:

const тип переменная;

тип const переменная;

- использовать 2-й вариант