Variáveis de pilha vs. Variáveis de pilha

Estou correto ao pensar que:

char *buff[500];

... cria uma variável de pilha e:

char *buff = (char *)malloc(500);

... cria uma variável de heap?

Se estiver correto, quando e por que você usaria variáveis de pilha sobre variáveis de pilha e vice-versa. Entendo que a pilha é mais rápida, existe mais alguma coisa.

Uma última pergunta, a principal função é um quadro de pilha na pilh

questionAnswers(8)

yourAnswerToTheQuestion