Ho appena trovato un po 'di confusione mentre utilizzavo l'operatore di incremento nella serie di puntatori.Cosa c'è di sbagliato con l'operatore di incremento nella serie di puntatori?
Codice 1:
int main(void) {
char *array[] = {"howdy", "mani"};
printf("%s", *(++array));
return 0;
}
Durante la compilazione, gcc genera un errore ben noto "lvalue richiesto come operando di incremento".
Ma quando compilo il codice qui sotto non mostra errori !!! Perché?
Code2:
int main(int argc, char *argv[]) {
printf("%s",*(++argv));
return 0;
}
In entrambi i casi, sono stato incrementare una matrice di puntatore. Quindi, dovrebbe essere fatto in questo modo.
char *array[] = {"howdy","mani"};
char **pointer = array;
printf("%s",*(++pointer));
Ma perché codice2 non mostra errori?
Molto interessante! La mia ipotesi è che considera 'char * argv []' equivalente a 'char ** argv' ma non così con un puntatore definito dall'utente all'array .. – Claudiu
Una variabile locale' char * array [] 'è una matrice di puntatori . Un argomento di funzione 'char * argv []' è in realtà un 'char ** argv'. Norma di bozza C11 '6.7.6.3 Dichiaratori di funzione (compresi i prototipi), Sezione 7 Una dichiarazione di un parametro come '' array of type '' deve essere adattata a '' pointer qualificato per digitare '' [...]'. – EOF
'char * argv []' passato a 'main()' decade in 'char **', non così con il tuo uso diretto di '* array []' in 'main()' –