Allora tutte le volte che passi un array ad una funzione in verità passi solo la posizione del primo elemento anche se poni const (infatti puoi scrivere char scritta[] come char *scritta che sono equivalenti). La funzione a priori non conosce la dimensione del vettore e qui salta in gioco la seconda variabile passata che è grandezza ed equivale alla dimensione in byte dell'array.
Se nel main scrivessi
Con questa funzionecodice:const char scritta[]={"Saluda Andonio!"}; cout<<sizeof(scritta); avrei come stampa 16 che sono i byte di scritta[] se invece dalla funzione anche se const scrivessi cout<<sizeof(array_passato) avrei come stampa 4 (32bit) o 8 (64bit) che sono la dimensione del puntatore come aveva detto shodan.
La funzione riceve il primo elemento del tuo array NON const perché poi dovrà essere modificato con CharToOemBuffA e sarebbe stato impossibile modificarlo se fosse stato definito constcodice:void stampa(char scritta[],int grandezza){ CharToOemBuffA(scritta,scritta,grandezza); for(int i=0;i<grandezza;i++) cout<<scritta[i]; cout<<endl; }
Ora scritta puntatore e strano[0] hanno lo stesso indirizzo, ciò che accade ad uno accade anche all'altro quindi anche l'array di partenza(strano[]) viene modificato alla chiamata di CharToOemBuffA. Il comando CharToOemBuffA prende l'array puntatore, lo converte conoscendo la sua dimensione (grandezza) e lo sovrascrive a quello iniziale.
Puoi richiamare la funzione con qualsiasi array tu abbia dichiarato nel main
Spero di essere stato d'aiuto e di non aver scazzato qualcosacodice:char scritta[]={"Saluda Andonio!"}; char scritta2[]={"èéòàùì"}; stampa(scritta,sizeof(scritta)); stampa(scritta2,sizeof(scritta2));

Rispondi quotando
