| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > инициализация массива в структуре |
| Автор: Alvi 19.2.2008, 10:39 |
| Есть язык Си (НЕ С++). Нужно организовать примитивную базу данных для описания меню на микроконтроллер. Итак, хотелось бы всё меню поместить в структуру, в которой помещаются названия менюшек, единиц измерения, их значений и т.д. Для простоты задачи сделаем структуру из четырех элементов: struct{ unsigned char ID; char Name[3]; int Default[3]; int Value[3]; }Menu; где ID - номер элемента меню Name - название элемента меню Default - значения по умолчанию value - текущее значение все как бы ничего, но у меня параметры Name и Default должны инициализироваться при программировании, и не изменяться, т.е. хотелось бы видеть все это примерно в таком виде: struct{ unsigned char ID; char Name[3] = {"Перем1", "Перем2", "Перем3"}; int Default[3] = {1, 2, 3}; int Value[3]; }Menu; Но не работает, собака... При компиляции пишет ошибки как раз в строках инициализации массивов Name и Default. Отсюда вопрос: Как это можно обойти? Не принимается инициализация элементов структуры типа: Menu.Name[0] = "Перем1"; Menu.Name[1] = "Перем2"; Menu.Name[2] = "Перем3"; Т.к. таких элементов просто дофига ,плюс в структуре есть один двумерный массив, плюс при программировании для микроконтроллеров есть куча специфических моментов при инициализации строковых переменных (организация памяти там через ж... сделана). Т.е. в таком виде инициализация меню займет половина памяти микроконтроллера. Жду ваших предложений. |
| Автор: EnergoHokum 19.2.2008, 11:13 |
| То-есть, если я правильно понял, нужно, чтобы эти поля были одинаковыми для всех экземпляров этой структуры? Тогда, может быть, сделать эти поля static? И char Name[3] = {"Перем1", "Перем2", "Перем3"};, мне кажется, скорее должно быть char* Name[3] = {"Перем1", "Перем2", "Перем3"};. Поправьте меня, если что... |
| Автор: _stranger_ 19.2.2008, 11:21 | ||
может вот так:
|
| Автор: Alvi 20.2.2008, 09:56 |
| Да, все верно! Я уже вчера сам разобрался. Всем спасибо Надо, действительно, делать так: struct M{ unsigned char ID; char Name[3]; int Default[3]; int Value[3]; }; struct M Menu{0, {"Перем1", "Перем2", "Перем2"}, {1, 2, 3}, {0, 0, 0} }; Вот и все дела. Обращаться к элементам таких массивов совсем просто: Menu.Value[2] = Menu.Default[2]; Ну или через typedef, что то же самое было бы Вся беда в том, что нужно было сделать примитивную базу данных на микроконтроллере, который не предназначен для этого. |