Puntantore ad un carattere

di il
2 risposte

Puntantore ad un carattere

Ciao!
Sto cercando di capire una cosa molto molto strana che accede in c++.
Se dichiaro un puntatore di tipo char e gli passo l' indirizzo di una varibile char a, quando stampo l' indirizzo non stampa in esadecimale ma una serie di caratteri ASCII molto strani.
Per fare in modo che stampi l' indirizzo della variabile in esadecimale devo utilizzare la seguente dicitura:
static_cast <void*>.
L'ho trovata su internet ma non ho capito bene a cosa serva, chi potrebbe spiegarmelo brevemente?

#include <iostream>
using namespace std;

 main(){
	char a=5;
	char* pippo;
	pippo=&a;
	cout<<" Indirizzo iniziale di a "<< pippo;
	pippo++;
	cout<<"\n Indirizzo finale di a "<<pippo;
}

#include <iostream>
using namespace std;

 main(){
	char a=5;
	char* pippo;
	pippo=&a;
	cout<<" Indirizzo iniziale di a "<< static_cast <void*>(pippo);
	pippo++;
	cout<<"\n Indirizzo finale di a "<<static_cast <void*>(pippo);
}
C' è un modo per poter stampare l' indirizzo senza questa forzatura?
Ciao, e grazie!!!

2 Risposte

  • Re: Puntantore ad un carattere

    Scrivere
    cout << pippo;
    è un modo più semplice di effettuare la seguente chiamata a funzione
    operator <<(cout, pippo);
    La suddetta è una funzione con overload, ossia esistono varie versioni della stessa funzione in base al tipo del secondo argomento.

    Nel caso in cui il secondo argomento è un puntatore a char, viene richiamata la versione della suddetta funzione che interpreta il contenuto di quel puntatore come l'indirizzo di memoria del primo carattere di una stringa C-style, ossia di un array di char terminato dal carattere \0.

    Detta in maniera più semplice, se utilizzi un puntatore a char, cout lo interpreterà come una stringa e non come un semplice puntatore.

    Se invece vuoi stampare l'indirizzo di memoria devi fare in modo che quello passato non sia un puntatore a char, e quindi una strada può essere quella di convertire il puntatore a carattere in un puntatore a void attraverso l'operatore di casting. Per esempio, utilizzando una forma meno pedante e rigorosa di quella da te riportata, si può scrivere
    cout << (void*)pippo;
    Oppure puoi sempre utilizzare la funzione printf().
  • Re: Puntantore ad un carattere

    Grazie @nippolo ora è tutto chiaro!
    Alla prossima!
Devi accedere o registrarti per scrivere nel forum
2 risposte