1) Колдунство
2) Чтобы через указатель работать с его содержимым, не нужен тип - есть void*
3) Потому, что глобальные создаются один раз вначале и их "не в падлу" обнулить, а вот локальные могут генериться внутри ф-ции которая вызывается много-много раз в цикле и все лишние телодвижения с ними замедляют программу.
4) нет.
PS
А может лучше купить/нагуглить книжку по С/С++? Это будет эффективнее вопросов на форуме.