¿Cómo entender la estrella puntero * en C?
Estoy luchando con el signo del puntero *, me resulta muy confuso cómo se usa tanto en declaraciones como en expresiones.
Por ejemplo
int *i; // i is a pointer to an int
Pero, ¿cuál es la lógica detrás de la sintaxis? ¿Qué significa el * justo antes del que quiero decir? Tomemos el siguiente ejemplo. Por favor corrígeme donde estoy equivocado:
char **s;
char *(*s); // added parentheses to highlight precedence
Y aquí es donde pierdo el rastro. El * s entre las paréntesis significa: s es un puntero? ¿Pero un puntero a qué? ¿Y qué significa el * fuera del paréntesis: un puntero a lo que s está apuntando?
Así que el significado de esto es: ¿El puntero que apunta a lo que está apuntando es un puntero a un personaje?
Estoy perdido. ¿El signo * se interpreta de manera diferente en las declaraciones y expresiones? Si es así, ¿cómo se interpreta de manera diferente? ¿Dónde me estoy equivocando?