Salve a tutti,// Printing a string one character at a time using a non-constant pointer to constant data
#include <iostream>
using std::cout;
using std::endl;
void printCharacters( const char * );
int main()
{
char string[] = "print characters of a string";
cout << "The string is:\n";
printCharacters( string );
return 0;
}
// sPtr cannot modify the character to which it points. sPtr is a "read-only" pointer
void printCharacters( const char *sPtr )
{
for ( ; *sPtr != '\0'; sPtr++ ) // no initialization
cout << *sPtr;
}
questo programma stampa una stringa dichiarata nel main passandola ad una funzione.
Ci sono però alcune cose che non mi sono chiare, che dipendono dalle mie lacune di programmazione quando si parla di puntatori e altre sottigliezze. Per chiarezza faccio un elenco in più punti così è più immediato, per chi vorrà, rispondere alle mie domande.
Vi ringrazio molto anticipatamente!!
1. nella dichiarazione della funzione che senso ha mettere come parametro ( const char * )? Const, se non mi sbaglio, indicherebbe una costante, char indica che stiamo parlando di stringhe, ma quell'asterisco messo lì che senso ha e che utilità può avere?
2. se mi facessi restituire la dimensione dell'array string dopo la sua dichiarazione e inizializzazione, questa sarebbe pari al numero di caratteri + quello di terminazione /0, o sbaglio?
3. Quando invoca
printCharacters( string );
è perchè, se non sbaglio, passa il nome dell'array di caratteri alla funzione, che è contemporaneamente un puntatore al suo primo elemento. Sarebbe così anche se dovessi passare un array di interi, ovviamente dichiarando nel prototipo della funzione un int e non un char?
4. perchè nel prototipo della funzione di stampa, tra i parametri c'è l'asterisco, mentre nella dichiarazione prima della sua definizione c'è *sPtr? (vedi qui sotto)
void printCharacters( const char *sPtr )
E perchè a volte ci sono dei prototipi del tipo:: void printCharacters( const char& ), che senso ha quella & non seguita da nulla?
5. perchè il puntatore della funzione di stampa sPtr è dichiarato come una costante, a questo punto non dovrebbe poter puntare successivamente agli elementi del vettore, ma puntare un valore costante?!
Nuovamente grazie del supporto!!