Полиморфный массив - C (СИ)
Формулировка задачи:
Как задать динамический массив из float и того, что было определено в typedef-e?
typedef обычная структурка
typedef struct ComplexObj ComplexObj; struct ComplexObj { float RealValue; float ImaginValue; };
Никто не знает?
Решение задачи: «Полиморфный массив»
textual
Листинг программы
#include <stdio.h> typedef struct ComplexObj ComplexObj; struct ComplexObj { float RealValue; float ImaginValue; }; struct Variant { enum { Unknown, Double, ComplexObjStruct } type; union { double x; ComplexObj co; }; }; int main() { struct Variant v; int t; scanf("%d", &t); if (t == 1) { v.type = Double; v.x = 3.14; } else if (t == 2) { v.type = ComplexObjStruct; v.co.RealValue = 1.2; v.co.ImaginValue = 3.4; } else { v.type = Unknown; } // ... switch (v.type) { case Double: printf("x = %g\n", v.x); break; case ComplexObjStruct: printf("%g + i*%g\n", v.co.RealValue, v.co.ImaginValue); break; default: printf("Error: unknown type.\n"); } }
Объяснение кода листинга программы
- Объявлены структуры ComplexObj и Variant
- В структуре ComplexObj содержатся поля RealValue и ImaginValue типа float
- В структуре Variant определён тип данных с помощью enum
- В структуре Variant определён union, который позволяет хранить либо double, либо ComplexObj
- В функции main создаётся экземпляр структуры Variant v
- С помощью scanf вводится значение переменной t
- В зависимости от значения t, устанавливается тип данных в структуре v
- Если тип данных Double, то в v.x записывается значение 3.14
- Если тип данных ComplexObjStruct, то в v.co записывается значение RealValue=1.2 и ImaginValue=3.4
- Если тип данных Unknown, то ничего не делается
- Выполняется блок кода, который не виден в данном примере (комментарий
// ...
) - С помощью switch выводится значение v.x или v.co в зависимости от типа данных
- Если тип данных не соответствует ни одному из известных, выводится сообщение об ошибке
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д