Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51

    [C++]Stringhe e puntatori

    Il puntatore contiene sempre e solo l'indirizzo della variabile a cui punta, giusto?
    Se lo stampo senza deferenziarlo, mi dovebbe dunque fornire un indirizzo di memoria...

    Cosa c'e' di sbagliatonel codicequi sotto??
    Come fa il primo elemento dell'array ad avere indirizzo "ciao pippo" ??????

    Grazie!



    codice:
    #include <iostream>
    
    using namespace std;
    
    void stampa(char *b){
         cout << "b = " << b << endl ;//mi stampa l'indirizzo contenuto nel puntatore *b, cioè...'pippo ciao'!    
         cout << "*b = " << *b;//mi stampa il contenuto dell'indirizzo puntato da b, cioè....p!   
         }
    
    
    
    int main () {
         char *a;
         //assegna al puntatore l'indirizzo del primo elemento dell'array {"p","i","p","p","o"," ","c","i","a","o"}
         a = "pippo ciao"; 
         std::cout << "a = " << a << endl; //l'indirizzo di "p" è...'pippo'!!!
         stampa(a);//passo l'indirizzo alla funzione stampa
         return 0;
         }

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

    cout << "b = " << (int)b << endl;

    e

    cout << "a = " << (int)a << endl;

    per indicare che vuoi visualizzare le variabili come valore numerico

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Grazie!
    Si tratta di una specie d casting?

    Ma vorrei capire il perche'...

    se dichiaro un puntatore di qualsiasi tipo, diciamo di tipo
    "ciccio", e dichiaro una variabile di tipo "ciccio", il puntatore conterrà sempre e solo l'indirizzo della variabile:

    ciccio *a;
    ciccio b;
    a = &b;

    Ora so che per i char e' diverso: dichiarare

    char *a;
    a = "pippo";

    e' come passare un array ["p","i","p","p","o"}, per cui dentro il puntatore dovrebbe finirci l'indirizzo
    del primo elemento, "p"...

    Ed infatti mi aspetto di vedere proprio l'indirizzo del primo elemento, ma invece ottengo tutta la stringa.

    Vorrei capire la teoria che c'e' dietro...come puo' un puntatore contenere la stringa anziche' l'indirizzo di memoria????

    Ciao!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La cosa e' molto piu' semplice di quello che credi.

    Non e' la variabile puntatore che contiene la stringa (e' sbagliato dire una cosa del genere, in quanto la variabile puntatore contiene sempre l'indirizzo per puntare alla stringa).

    Il fatto e' di "come" viene interpretata la variabile dall'entita' che visualizza il dato.

    La cout, se non specifichi che il dato deve essere "interpretato" numericamente, sapendo che e' un puntatore a char, ne mostra automaticamente il "valore" puntato.

    Con la printf ti renderai conto meglio che il dato puo' essere interpretato come meglio si crede. Con questa funzione lo si fa attraverso il codice di formattazione passato come argomento.
    Nel tuo codice per esempio, se scrivi

    printf("%s", a);

    stai indicando al compilatore che a deve essere interpretato come puntatore a una stringa e che bisogna visualizzare tale stringa. Questo comporta la generazione automatica di codice tale che si accede al contenuto puntato dal puntatore e non al suo valore.
    Se pero' scrivi

    printf("%p", a);

    oppure

    printf("%x", a);

    stai indicando al compilatore di generare il codice atto a visualizzare il valore del puntatore stesso e non il valore puntato, e visualizzarlo in esadecimale.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Grazie ancora!
    Era finalmente e' tutto chiaro...

    Immagino che la cosa (quando e' un char* prendere direttamente la variabile puntata) non valga solo per cout, ma per la maggior parte (tutte?) le funzioni che prendono le stringhe come argomento...
    giusto?

    Ciao!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    cout e' un oggetto e quindi il suo comportamento dipende da come e' stato implementato l'operatore >> per tale oggetto.

    Per le funzioni il discorso cambia. In genere il tipo di parametro e' indicato dalle funzioni. E' un discorso che non puo' essere fatto in generale ma caso per caso.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    OK...argomento esaurito.
    Grazie!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.