Em parte estás certo, mas acho que não estás totalmente correcto.
Se fizesses char array[10][10]; podias usar 10 strings com até 10 caracteres sem precisar de mais nada:
array[0] = "palavra1";
array[0] = "palavra2";
Como estás a fazer, char *array[10]; apenas crias 10 ponteiros para strings sem memória alocada, ou seja é um array de ponteiros.
Terias de fazer depois, array[0] = malloc( 10 * sizeof(char) ); e por aí fora para alocar a memória, depois é que podes fazer array[0] = "palavra1";
Tambés sou aluno do IST embora só tenha começado agora o 1º ano. 
EDIT:
Afinal também estás certo no resto, fazendo array[0] = "palavra"; aloca automaticamente a memória.
Para se utilizar outras formas de preencher o array como strcpy e etc é que já vai ser preciso alocar a memória com o malloc.
De qualquer forma deixo o que já escrevi que não deixa de estar correcto.