¿Por qué se argvdeclara como "un puntero al puntero al primer índice de la matriz", en lugar de ser simplemente "un puntero al primer índice de la matriz" ( char* argv)?
¿Por qué se requiere la noción de "puntero a puntero" aquí?
char* argv[]pone el espacio en el lugar equivocado. Digamos char *argv[], y ahora está claro que esto significa "la expresión *argv[n]es una variable de tipo char". No se deje atrapar por tratar de averiguar qué es un puntero y qué es un puntero a un puntero, y así sucesivamente. La declaración le dice qué operaciones puede realizar en esta cosa.
char * argv[]con la construcción similar de C ++ std::string argv[], y podría ser más fácil de analizar. ... ¡Simplemente no empieces a escribirlo de esa manera!
char &func(int);lo que no hace que &func(5)tenga tipo char.

char* argv[]ochar**. Eso es un puntero a un puntero a un personaje; específicamente el puntero externo apunta al primer puntero en una matriz, y los punteros internos apuntan a los primeros caracteres de cadenas terminadas en nulo. No hay índices involucrados aquí.