Perché viene argvdichiarato come "un puntatore al puntatore al primo indice dell'array", anziché essere semplicemente "un puntatore al primo indice dell'array" ( char* argv)?
Perché qui è richiesta la nozione di "puntatore a puntatore"?
char* argv[]mette lo spazio nel posto sbagliato. Dì char *argv[], e ora è chiaro che questo significa "l'espressione *argv[n]è una variabile di tipo char". Non lasciarti sorprendere dal tentativo di capire cos'è un puntatore, cos'è un puntatore a un puntatore e così via. La dichiarazione ti dice quali operazioni puoi eseguire su questa cosa.
char * argv[]con il costrutto C ++ simile std::string argv[]e potrebbe essere più semplice analizzarlo. ... Non iniziare a scriverlo in quel modo!
char &func(int);che non &func(5)ha tipo char.

char* argv[]ochar**. Questo è un puntatore a un puntatore a un personaggio; in particolare il puntatore esterno punta al primo puntatore in un array, mentre i puntatori interni puntano ai primi caratteri delle stringhe nul-terminate. Non ci sono indici coinvolti qui.