Можно приписать это поведение основному намерению позади создания Перечислений... для создания ряда именованных констант, которые могли только указать (или значение по умолчанию) значения в зависимости от базового типа.
существует два отдельных вопроса для рассмотрения, как связано с вопросом:
Enum
значение нельзя рассматривать как интервал по умолчанию, потому что затем Вы смогли бы обеспечить любой целое число и не будет никакой проверки времени компиляции для проверки этого, обеспеченное целое число действительно на самом деле существует как значение в Перечислении.
Кастинг становится необходимым, так как Вы пытаетесь преобразовать из управляющего типа (типа YourCustomEnum
, который происходит из System.Enum
класс) к базовому типу, т.е. int
или byte
, и т.д.
Absolutely valid. Usually, you can take full advantage of this way by defining two types together:
typedef struct
{
int a;
int b;
} S1, *S1PTR;
Where S1 is a struct and S1PTR is the pointer to this struct.
Yes it is valid. If you need more "security" you can also do
typedef struct vector_{
double x;
double y;
double z;
} *vector;
then you can use both
struct vector_ *var;
vector var;
But don't forget the ending semi-colon.
Using only typedef means that you name it that way. otherwise it'd be more or less anonymous.
Это допустимый тип, он определяет новый тип. Как сказал @Alex, было бы полезно определить тип и тип указателя.
Вы можете создать больше указателей, просто используя
S1PTR ptr1, ptr2, ptr3, ...;
вместо
S1 *ptr1, *ptr2, *ptr3, ...;
Да, это действительно так, как описано в ответах выше. Небольшое предложение, было бы лучше, если бы вы также указали имя тега, как показано ниже. Это поможет некоторым IDE лучше проанализировать ваш код.
typedef struct vactor_tag {
double x;
double y;
double z;
} *vector;
yes...saves you the trouble of constantly typing the word 'struct' everytime you declare the vector struct or a pointer to it.