Laboratorio di programmazione

Esercizio 4

Per scaricare il file sorgente di questo esercizio clicca qui
Per scaricare il file eseguibile di questo esercizio clicca qui

Vengono inizialmente dichiarati due puntatori di tipo int, due array di interi, una variabile di tipo intero, un array di char alla quale viene assegnata la stringa "ciao" e il puntatore x che punta al primo elemento dell' array (quindi la lettera c di ciao) come visto nell' esercizio3. Per ultimo il puntatore "punta" viene fatto puntare alla stringa "cristian".

Vediamo però di capire meglio cos'è una stringa. Le variabile di tipo char possono contenere un unico carattere, perciò hanno un utilizzo limitato. Più utile risulta la memorizzazione di stringhe, ovvero sequenze di caratteri. Il linguaggio C gestisce le stringhe tramite gli array di caratteri. Per registrare un array di quattro caratteri, ad esempio, è necessario dichiarare un array di tipo char composto da cinque o più elementi. Questo in quanto in C una stringa è definita come una sequenza di caratteri che termina con il carattere null, un carattere speciale (escape visti nell' esercizio 1) rappresentato da \0.

Se al momento della dichiarazione di un array non viene specificato il numero di componenti, il compilatore calcola automaticamente la dimensione di quell' array (contando anche il carattere finale null). Quindi la stringa "ciao" può anche essere memorizzata nel seguente modo:

Il nome di un array rappresenta l' indirizzo del primo elemento di un array, ovveroil puntatore al primo elemento dell' array, quindi per accedere ad una stringa basta solo il nome dell' array stesso. Dato che l' inizio di una stringa è definito da un puntatore ad una variabile di tipo char possiamo fare cose di questo tipo:

la stringa "cristian" (con il carattere null finale) viene memorizzata in una porzione di memoria e il puntatore punta viene inizializato in modo che punti al primo carattere della stringa. La dichiarazione con il puntatore indicata sopra è equivalente a quella che segue:

in entrambe la notazione "punta" rappresenta un puntatore al primo elemento della stringa. Proseguendo con l'esercizio vediamo come inizializare e copiare un array su un' altro con l'utilizzo dei puntatori.

Nel ciclo for vengono fatti puntare i due puntatori ai due array di interi. La condizione d'uscita dal ciclo impone che l' indirizzo contenuto nel puntatore p deve essere minore dell' indirizzo dell' ultimo elemento dell' array a (ricordiamo che la e commerciale indica "indirizzo di"). Infine i due puntatori vengono incrementati, facendoli cosi puntare all' elemento successivo. All' interno del ciclo prima vengono inizializati a zero gli elementi del primo array, e poi ogni elemento del secondo array viene uguagliato a agli elementi del primo. Ne viene poi stampato su schermo il risultato:

Successivamente vengono stampati su video tutti i caratteri dell' array c che era stato inizializato con la stringa "ciao", il risultato sarà quindi:

Di seguito si possono vedere alcuni modi per stampare interamente la stringa "ciao", con la funzione puts e con la funzione printf:

Si noti come sia indifferente passare il nome dell' array c o il puntatore x che punta al primo elemento dell' array. Questo in quanto, come detto in precedenza il nome di un array è anch'esso il puntatore al primo elemento dell' array stesso. Il risultato sarà:

Ci viene poi richiesto di inserire il valore dell' elemento c[3] del nostro array ( che sarà la lettera o di ciao).

Tramite il costrutto di controllo di selezione o condizionale If-Else, ci viene stampato vero se digitiamo correttamente il carattere richiesto, altrimenti falso. Si noti che per far questo è stao utilizzato l' operatore di confronto ==. In fine per dimostrare che le stringhe possono essere memorizzate anche attraverso puntatori stampiamo la stringa "cristian" e il carattere punta[3] della stringa memorizzata.

Ciò che verrà stampato su schermo è:























































Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.