Everything's right, as the correct C goes. But nontheless, everything's
confusing.
By writing char** s or char **s we declare not a character variable but
rather a pointer to character variable, hence the variable type is char** or
char ** and the name of that variable is s but not **s or ** s.
This is another oddity about C that I consider misleading. Especially in a
case like this, declaration of variables:
char* s1, s2;
or
char *s1, s2;
s1 is a variable of type pointer to char. But what's the type of s2? It's
char according to C, although logically the asterisk must have stuck to
char, to the base type from which the actual type (pointer to char) is
derived.
Those who know this odd thing, don't have problems programming it right, but
find this odd.
Those who don't know it yet, will find it *extremely* odd.
If I were to change C, this would be another thing...
So, according to C and what the C source code gets compiled to, * is neither
part of type nor part of name.