Como entender a estrela do ponteiro * em C?

Estou tendo problemas com o sinal do ponteiro *, acho muito confuso como ele é usado nas declarações e nas expressõe

Por exemplo

int *i; // i is a pointer to an int

Mas qual é a lógica por trás da sintaxe? O que significa o * pouco antes do que eu quero dizer? Vamos dar o seguinte exemplo. Corrija-me onde estiver errado:

char **s;
char *(*s); // added parentheses to highlight precedence

E é aqui que perco a noção. O * s entre parênteses significa: s é um ponteiro? Mas um ponteiro para o que? E o que o * fora dos parênteses significa: um ponteiro para o que s está apontando?

Então, o significado disso é: O ponteiro apontando para o que está apontando é um ponteiro para um caracter

Estou perdida. O sinal * é interpretado de maneira diferente nas declarações e expressões? Em caso afirmativo, como é interpretado de maneira diferente? Onde eu estou errando

questionAnswers(10)

yourAnswerToTheQuestion