Pointer Frage



  • (*iZaehler)++;
    

    probier´s mal so


  • Mod

    ++*iZaehler
    


  • Warum übergibst du iGroesse eigentlich als Referenz? Das ist unnötig.



  • camper schrieb:

    ++*iZaehler
    

    ist das eigentlich egal ob man var++ oder wie oben ++var schreibt?



  • franz-21 schrieb:

    camper schrieb:

    ++*iZaehler
    

    ist das eigentlich egal ob man var++ oder wie oben ++var schreibt?

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39454.html

    Grüssli


  • Mod

    franz-21 schrieb:

    camper schrieb:

    ++*iZaehler
    

    ist das eigentlich egal ob man var++ oder wie oben ++var schreibt?

    Es gibt schon einen Unterschied: Der Ausdruck C++ gibt C zurück, der Ausdruck ++C gibt C+1 zurück. Bei beiden ist hinterher der Wert von C um 1 erhöht. Wenn man (wie hier) die Rückgabe überhaupt nicht beachtet, ist es folglich egal.



  • franz-21 schrieb:

    stopt beim kompilieren dort und das Programm lässt sich nicht weiter ausführen, obwohl kein fehler angezeigt wird

    Wenn der beim kompilieren stoppt und du das Programm trotzdem zum Laufen bekommen hast, dann bist du ein Programmier-Gott.



  • Jetzt habe ich noch eine Frage:
    Mit der folgenden Schreibweise kann ich mich bis heute nicht anfreunden.

    CMitglieder* (*pMitgliederTemp)=new CMitglieder*[m_iAnzahl];
    

    ändert sich da was wenn man so schreibt?

    CMitglieder *pMitgliederTemp=new CMitglieder[m_iAnzahl];
    

    mfg



  • franz-21 schrieb:

    Mit der folgenden Schreibweise kann ich mich bis heute nicht anfreunden.

    CMitglieder* (*pMitgliederTemp)=new CMitglieder*[m_iAnzahl];
    

    Mein Compiler auch nicht. Was soll das für ein cast sein?



  • DarkShadow44 schrieb:

    NULL-Pointer dürfen in C++ gelöscht werden.

    class CVerein{
    
        private:
        CMitglieder* (*pMitglieder);
        int m_iAnzahl;
    
        public:
            void add();
            CVerein();
    };
    
    void CVerein::add(CMitglieder*m){
    
        CMitglieder* (*pMitgliederTemp)=new CMitglieder*[m_iAnzahl];
        int i;
        for(i=0;i<m_iAnzahl;i++)
        {
            pMitgliederTemp[i]=pMitglieder[i];
        }
        delete[] pMitglieder;
    
        m_iAnzahl++;
        pMitglieder=new CMitglieder*[m_iAnzahl];
    
        for(i=0; i<m_iAnzahl-1; i++){
            pMitglieder[i]= pMitgliederTemp[i];
           
        }
        pMitglieder[i]=m;
        delete[] pMitgliederTemp;
        
    }
    
    CVerein::CVerein(){
        pMitglieder=NULL;
        m_iAnzahl=0;
    }
    

    So ungefähr würde ich das machen...
    Probleme:
    - 1. Mitglied, reservierter Speicher 0, ich weiß nicht ob das Probleme gibt, aber das must du lösen :p

    keine Ahnung


  • Administrator

    franz-21 schrieb:

    Jetzt habe ich noch eine Frage:
    Mit der folgenden Schreibweise kann ich mich bis heute nicht anfreunden.

    CMitglieder* (*pMitgliederTemp)=new CMitglieder*[m_iAnzahl];
    

    ändert sich da was wenn man so schreibt?

    CMitglieder *pMitgliederTemp=new CMitglieder[m_iAnzahl];
    

    Ja, das sind zwei unterschiedliche Dinge. Das obere erstellt ein Array von Zeigern auf CMitglieger Objekte, dass untere ein Array von CMitglieder Objekten.
    Der Typ vor der Zuweisung im oberen ist ein Zeiger auf einen Zeiger auf ein CMitglieder Objekt und im unteren ein Zeiger auf ein CMitglieder Objekt.

    Allerdings sind die Klammern im oberen völlig unnötig. Siehe weiter unten, für eine schönere schreibweise, zumindest meiner Meinung nach 😉

    FrEEzE2046 schrieb:

    franz-21 schrieb:

    Mit der folgenden Schreibweise kann ich mich bis heute nicht anfreunden.

    CMitglieder* (*pMitgliederTemp)=new CMitglieder*[m_iAnzahl];
    

    Mein Compiler auch nicht. Was soll das für ein cast sein?

    Welchen benutzt du denn? Das ist nur eine sehr hässliche schreibweise für:

    CMitglieder** pMitgliederTemp = new CMitglieder*[m_iAnzahl];
    

    Also ein Zeiger auf ein Array von Zeigern.

    Grüssli



  • Aha, danke

    Dies habe ich bis jetzt noch nie verwendet bzw habe ich noch nicht müssen und hoffe das es dabei bleibt xD


Anmelden zum Antworten