Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    79

    [Dev C++] Terzo grado su un semplice programma per chiarire alcune lacune

    // 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;
    }
    Salve a tutti,
    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!!
    "La fortuna aiuta gli audaci"
    (e non gli adagiati)

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    queste sono domande la cui risposta si trova nei primi 3 capitoli di OGNI libro di c o c++..

    rispondo lo stesso anche se sarebbe meglio che studiassi su un libro..

    1) L'asterisco indica che il parametro da passare è un puntatore a char costante, cioè che tale puntatore non può essere modificato

    2) si è corretto

    3) corretto pure questo

    4) lo "*" è l'operatore di "referenzazione", retituisce l'oggetto puntato dal puntatore
    il discorso della &: indica che è un riferimento ( nei prototipi non serve mettere il nome della variabile da passare perchè è opzionale ) quindi indica che passerai alla funzione una variabile tramite suo indirizzo..

    5) Attenzione che puntatore costante e puntatore a valore costante sono concetti molto differenti

  3. #3

    Re: [Dev C++] Terzo grado su un semplice programma per chiarire alcune lacune

    Originariamente inviato da Loue
    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?
    '\0' NON '/0'
    ;-)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.