А в чем разница между указателями bignum*a, bignum* a, bignum *a?
Ни в чем, но с первый аккуратней - а то компилятор может подумать, что это умножение.

При объявление рекомендуют использовать последний вариант, чтобы избегать ошибок типа:
Это эквивалентно:
И почему декларировать функция можно bignum*?
Потому что компилятор (линкер) различает функции по количеству и типам.