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

    [Dec C++] Piccolo dubbio su array visti come puntatori

    Salve a tutti,
    ho composto un programma in cui dichiaro un array di caratteri e ho imposto degli output significativi per capire il collegamento tra array e puntatori:



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {
    char string[] = "ciao Mondo";
    cout << "The address of string is " << &string << endl;
    cout << "The value of string is " << string << endl;
    cout << "The value pointed of string is " << *string << endl;

    cout << "The address of string[0] is " << &string[0] << endl;
    cout << "The value of string[0] is " << string[0] << endl;
    //cout << "The value pointed of string[0] is " << *string[0] << endl;
    //Restituisce un errore
    cout << "The address of string[1] is " << &string[1] << endl;
    cout << "The address of string[2] is " << &string[2] << endl;
    cout << "The address of string[8] is " << &string[8] << endl;
    cout << "The value of string[1] is " << string[1] << endl;
    cout << "The value of string[2] is " << string[2] << endl;
    cout << "The value of string[8] is " << string[8] << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    Gli output sono:

    The address of string is 0x23ff68
    The value of string is ciao Mondo
    The value pointed of string is c

    Fin qui tutto ok, il libro afferma che il nome di un array è un puntatore al suo primo elemento, quindi il valore puntato è giustamente string[0]=c.

    Proseguendo, però, mi sorgono dei dubbi e il libro non dice nulla su ciò.

    The address of string[0] is ciao Mondo
    The value of string[0] is c
    //cout << "The value pointed of string[0] is " << *string[0] << endl;
    //Restituisce un errore

    [...]

    The address of string[8] is do

    [...]

    The address of string[8] is d
    Quindi usando l'operatore & davanti ad un elemento del vettore indicizzato, ad esempio &string[0] come sopra, non restituisce l'indirizzo della cella di memoria di string[0], ma il valore di string, cioè ciao Mondo. D'altra parte la scrittura *string[0] restituisce un errore.
    Ora, visto che gli indirizzi di memoria in un array sono tutti immediatamente consecutivi, come faccio ad accedere agli indirizzi di memoria dei vari elementi del vettore, se usando l'operatore & mi viene restituito non l'indirizzo della singola cella, ma il valore del vettore a partire dall'n+1 elemento indicizzato?
    Es: &string[8]=do, ossia tutto quello che c'è in string dall'8+1 elemento compreso in su.

    E come mai la scrittura *string[0] non ha senso?


    Grazie mille!!
    "La fortuna aiuta gli audaci"
    (e non gli adagiati)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [Dec C++] Piccolo dubbio su array visti come puntatori

    Devi solmente indicare alla cout che quello che vuoi visualizzare e' il valore numerico dell'indirizzo e non la stringa a partire da quell'indirizzo ...

    cout << "The address of string[1] is " << (int)&string[1] << endl;
    cout << "The address of string[2] is " << (int)&string[2] << endl;
    cout << "The address of string[8] is " << (int)&string[8] << endl;

    E come mai la scrittura *string[0] non ha senso?
    Perche' string[0] non e' un indirizzo valido ma un carattere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    meglio se fai:
    codice:
    cout << "The address of string[1] is " << (void *)&string[1] << endl;
    ;-)

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.