Por que é argvdeclarado como "um ponteiro para apontar para o primeiro índice da matriz", em vez de apenas ser "um ponteiro para o primeiro índice da matriz" ( char* argv)?
Por que a noção de "ponteiro para ponteiro" é necessária aqui?
char* argv[]coloca o espaço no lugar errado. Digamos char *argv[], e agora está claro que isso significa "a expressão *argv[n]é uma variável do tipo char". Não seja pego tentando descobrir o que é um ponteiro e o que é um ponteiro para um ponteiro, e assim por diante. A declaração está dizendo quais operações você pode executar nessa coisa.
char * argv[]com a construção semelhante em C ++ std::string argv[]e poderá ser mais fácil analisar. ... Apenas não comece a escrever dessa maneira!
char &func(int);que não faz &func(5)ter tipo char.

char* argv[]ouchar**. Isso é um ponteiro para um ponteiro para um personagem; especificamente, o ponteiro externo aponta para o primeiro ponteiro em uma matriz e os ponteiros internos apontam para os primeiros caracteres de cadeias terminadas em nulo. Não há índices envolvidos aqui.