Цитата(alekseykoj @ Dec 14 2009, 08:35)

Можно пользоваться указателями
Можно, но какой смысл? Заводим локальную переменную в main() и через указатель делаем ее как-бы глобальной. Какие преимущества это дает по сравнению с обычной глобальной переменной? Т.е. ради чего занимается лишняя память под указатель и ради чего мы вынуждаем процессор постоянно обращаться к структуре косвенно?
Цитата(alekseykoj @ Dec 14 2009, 08:35)

например вот так:
Вот так делать не нужно ни в коем случае. Вместо того, чтобы завести указатель на нужный тип и позволить компилятору контролировать ваши описки, вы заводите указатель на void * и вынуждены при каждом обращении вручную, принудительно приводить его к нужному типу. Компилятор не имеет возможности проверить, совместим ли объект, на который указывает указатель и тот тип, к которому вы его приводите методом грубой силы.
Цитата(alekseykoj @ Dec 14 2009, 08:35)

Код
void Proc1(void)
{
h_VarA->alpha = 123;
}
Не скомпилится. h_VarA - указатель на void
Цитата(alekseykoj @ Dec 14 2009, 08:35)

Код
h_VarA = (void*)&keyboard;
Явное приведение лишнее. Любой не-cv (const и/или volatile) указатель приводится к void * неявно.
P.S. используйте кнопку

на форме ввода для оформления кода.