Rückgabe von konstanten Zeigern



  • Hi,

    ich habe eine Methoden die einen konstanten Zeiger auf eine Zeichenfolge zurückgibt. Wenn ich aber diesen konstanten Zeiger einem "normalen" Zeiger zuweise kann ich die Zeichenfolge trotzdem ändern.
    In meinem Buch steht aber, dass bei einem FUNKTIONSAUFRUF (Leider habe ich nichts zu einer Rückgabe gefunden) als Parameter keine konstanten Zeiger an "normale" Zeiger übergeben werden können. Warum ist das also bei der Rückgabe möglich und gibt es eine andere Möglichkeit eine Zeichenfolge zurückzugeben, über die man nicht das Original verändern kann?



  • im prinzip, wenn du nicht willst das dein Original veraendert wird einfach als const deklarieren

    const int bla = 3;
    
    int *fo = &bla;
    
    // fehler ?
    *fo += 43;
    

    da der c++ compiler zur Laufzeit nicht verfolt welches Objekt ein Zeiger adressiert, der compiler kann daher nicht ueberwachen ob ein Zeiger ein nicht konstantes oder ein konstantes Objekt adressiert, um nur dann einen Fehler zu melden wenn versucht wird, das Objekt indirket ueber den Zeiger zu veraendern.
    Daher meldet der compiler immer dann eine Fehler wennn man mit einem Zeiger auf ein nicht konstantes Objekt ein konstantes Objekt adressiert.

    darum

    const int *ptr;
    

    die deklaration eines Zeigers muss indirekt vorgenommen werden

    const int *pc = 0;
    const int fo = 3;
    
    pc = &mingehlat; //ok
    
    int val = 2;
    
    pc = &val; // ok
    *pc = 9; // fehler
    


  • FUNPAQ schrieb:

    gibt es eine andere Möglichkeit eine Zeichenfolge zurückzugeben, über die man nicht das Original verändern kann?

    Ja. Nicht const Zeiger auf T verwenden

    T* const
    

    sondern Zeiger auf const T

    const T*
    // bzw
    T const*
    


  • Danke für die schnellen Antworten! 🙂


Anmelden zum Antworten