Qual é a diferença entre char * str = {"foo",…} e char str [] [5] = {"foo", ...} definições de matriz?

Caso 1: Quando escrevo

char*str={"what","is","this"};

entãostr[i]="newstring"; é válido enquantostr[i][j]='j'; é inválido.

Caso 2: Quando escrevo

char str[][5]={"what","is","this"};

entãostr[i]="newstring"; não é válido enquantostr[i][j]='J'; é válido.

Por que é tão? Eu sou um iniciante que já fica muito confuso depois de ler as outras respostas.

questionAnswers(9)

yourAnswerToTheQuestion