Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Инициализация структуры

03.02.2020, 14:49. Показов 2444. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех! Подскажите, существует ли простое решение следующей задачи.
Есть несколько структур, содержащих числовые поля и массивы символов. Возможно ли написать одну функцию, которая будет принимать указатель на структуру и заполнять ее числовые поля нулями, а массивы символов, например, символами 'T'? Интересует решение именно в стиле С.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Data1 {
  int a;
  double b;
  char c[10];
};
 
struct Data2 {
  char a;
  int b;
};
 
int main()
{
  struct Data1 data1;
  struct Data2 data2;
 
  SomeFun(&data1); // Должно стать a = 0, b = 0.0, c = "TTTTTTTTTT"
  SomeFun(&data2); // Должно стать a = 'T', b = 0.0
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2020, 14:49
Ответы с готовыми решениями:

Инициализация структуры
Всем привет! Подскажите плиз, как инициализировать структуру с переменной AnsiString struct str{ AnsiString ttt; }; str...

Инициализация структуры
Доброе время суток всем! Кто-нибудь может подсказать, как инициализировать переменную типа структуры, нечто вроде следующего: ...

Инициализация структуры
Не удается инициализировать структуру, которая имеет тип AnsiString нижеприведенным способом в C++Builder 6. Этот код находится не в...

10
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
03.02.2020, 15:11
Цитата Сообщение от d7d1cd Посмотреть сообщение
Возможно ли написать одну функцию, которая будет принимать указатель на структуру и заполнять ее числовые поля нулями, а массивы символов, например, символами 'T'? Интересует решение именно в стиле С.
Да, возможно.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
03.02.2020, 15:50  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Да, возможно.
Здорово! Вы думаете мне только интересно возможно это или нет ? Если это возможно, то как это сделать?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
03.02.2020, 16:01
Цитата Сообщение от d7d1cd Посмотреть сообщение
Вы думаете мне только интересно возможно это или нет ?
Да. Я думаю именно так.
Цитата Сообщение от d7d1cd Посмотреть сообщение
Если это возможно, то как это сделать?
Добавить в каждую структуру первое поле - идентификатор, чтобы общая функция могла их различать.
Если размеры структур разных типов не совпадают, можно различать их по размеру.
----
Типы полей компилятор в коде не сохраняет.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
03.02.2020, 16:18  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Добавить в каждую структуру первое поле - идентификатор
Этого сделать нельзя. Структуры менять не разрешено.

Цитата Сообщение от Verevkin Посмотреть сообщение
Если размеры структур разных типов не совпадают
Могут не совпадать, могут совпадать...

Даже если бы можно было добавить в структуры поля, как в функции сделать заполнение?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
03.02.2020, 16:28
Цитата Сообщение от d7d1cd Посмотреть сообщение
Даже если бы можно было добавить в структуры поля, как в функции сделать заполнение?
Ну я хз, мож вот так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
typedef struct {
  unsigned ID;
  int a;
  double b;
  char c[10];
} Data1;
 
typedef struct
{
  unsigned ID;
  char a;
  int b;
} Data2;
 
void fill(void* ptr)
{
  unsigned* pid = p;
  switch (*pid)
  {
    case 1: ... break;
    case 2: ... break;
    //.......
    default ....;
  }
}
Конечно, поле ID структуры должно быть инициализировано до передачи в функцию.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
03.02.2020, 16:34  [ТС]
Интересное, конечно, решение. Однако оно предполагает, что в каждом кейсе я должен знать, прошу за тавтологию, структуру структуры. То есть, функция будет заточена на использование только с конкретными структурами. А надо чтобы она была универсальной.
Чувствуется нет решения у этой задачи. Даже на С++ с использованием RTTI...
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5779 / 1275
Регистрация: 12.03.2015
Сообщений: 26,705
03.02.2020, 16:37
Цитата Сообщение от d7d1cd Посмотреть сообщение
А надо чтобы она была универсальной.
Чувствуется нет решения у этой задачи. Даже на С++ с использованием RTTI...
Ну, нет, значит нет.
Юзай С++ и классы с общим предком, коорые сами себя будут инициализировать в конструкторах и/или извне (RTTI) - через имена свойств.

Я, хотя бы, попытался. Спасибо мне.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
03.02.2020, 17:40
Цитата Сообщение от d7d1cd Посмотреть сообщение
Возможно ли написать одну функцию, которая будет принимать указатель на структуру и заполнять ее числовые поля нулями, а массивы символов, например, символами 'T'?
ну можете попробовать что-то вроде magic_get
0
фрилансер
 Аватар для Алексей1153
6465 / 5679 / 1131
Регистрация: 11.10.2019
Сообщений: 15,122
03.02.2020, 19:06
GbaLog-,
my_struct s{{"Das ist fantastisch!"}, 100};
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.02.2020, 22:37
Это все ведет к теме "С++ и рефлексия" может прям так и гуглить.

Типа
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2020, 22:37
Помогаю со студенческими работами здесь

Инициализация вложенной структуры
Здравствуйте! Имеется структура, хранящая 2 вложенные структуры: typedef struct{ struct str1{ int a; int b; int c; ...

Инициализация структуры
Есть структура struct msg quest; struct msg { double clientId; size_t cash; char message; };

инициализация структуры
Всем привет, нужно достать данные о DEP и ASLR каждого процесса, написал такую вещь void GetDepAndASLR(DWORD ProcID) { HANDLE...

Инициализация структуры
Приветствую всех. Есть такой код: typedef struct { char a; char b; } ST; ST b = { "abcde", "fghij" }; Компилятор...

Структуры, инициализация переменных
Возможно ли как-либо реализовать такой концепт: Если что-то там, то структура содержит N переменных, если НЕ что-то там, то содержит M? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru