Zeiger...



  • Hallo,
    Kann mir jemand erklären was an dem Code nicht ganz stimmt???

    #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
    
          int Age;
          int *pAge = &Age;
    
          Age = 10;
    
          cout << "Alter: " << Age << endl;
          cout << "an Adresse " << *pAge << endl;
          system("PAUSE");
          return 0;
    }
    

    für *pAge müsste er doch eigentlich die Adresse ausgeben... aber er gibt für Age sowie für *pAge beidesmal 10 aus...

    Danke schon mal für die Antworten

    gemuse



  • Nein, pAge ist der Zeiger, *pAge ist der Inhalt! Also das, was an der Stelle des Zeigers steht. Und das ist in der Tat die 10.



  • #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
    
          int Age;
          int *pAge = &Age;
    
          Age = 10;
    
          cout << "Alter: " << Age << endl;
          cout << "an Adresse " << pAge << endl; // so kommt die Adresse
          system("PAUSE");
          return 0;
    }
    


  • wenn du pAge (sprich Zeiger auf int) Ausgeben willst, dann must du auch pAge angeben.

    *pAge (sprich Inhalt von pAge) ist ein Integer und somit in deinem Fall 10.



  • Ok Danke für die schnellen Antworten, habs glaub ich verstanden.
    Ich beschäftige mich erst seit gut drei Wochen mit c++. Momentan lern ich aus so nem Buch und bei diesem Code komm ich nun nicht mehr ganz mit, ich hab ihn zwar mal abgetippt zum Testen, funktioniert auch einwandfrei, aber ich versteh ihn ehrlich gesagt nicht, könnte mir jemand da mal behilflich sein?

    Hier der Code:

    #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
              int Anzahl;
              cout << "Das Programm berechnet den Mittelwert verschiedener Zahlen\n\n ";
    
              cout << "Wieviel Werte moechten Sie eingeben? ";
              cin  >> Anzahl;
    
              int *pZeiger = new int[Anzahl];
    
              int i;
              for(i=0; i<Anzahl; i++)
              {
                       cout << "Zahl eingeben: ";
                       cin  >> pZeiger[i];
              }
              int Summe = 0;
              for(i=0; i<Anzahl; i++)
              {
                        Summe += pZeiger[i];
              }
    
              cout << "Mittelwert: " << Summe/Anzahl << "\n\n";
    
              system("PAUSE");
    
              return 0;
    }
    

    Kann man das nicht auch einfach machen???
    Also mir ist klar wie man einen Mittelwert berechnet, ich hab auch schon selbst Programme geschrieben, jedoch waren da immer die Werte begrenzt, also ich konnt z.B. nur den Mittelwert zweier Zahlen ausrechnen oder drei, jenachdem wieviel Variablen deklariert worden sind... Aber das obige Programm, kann man das nicht auch einfacher machen??

    gemuse



  • *erklär*

    #include <iostream> //die neuen header sind ohne h
    #include <cstdlib>
    using namespace std; //wenn dir die zeile nix sagt, dann lass es mal einfach
    //so stehen. später lernst du's dann.
    
    int main() {
              int Anzahl;
              cout << "Das Programm berechnet den Mittelwert verschiedener Zahlen\n\n "; //<- alles klar? 
    
              cout << "Wieviel Werte moechten Sie eingeben? ";
              cin  >> Anzahl;
    
              int *pZeiger = new int[Anzahl]; //jetzt werden - je nachdem, wieviele 
    //der benutzer will - neue ints angelegt. da du die größe erst zur laufzeit des 
    //programms erfährst, musst du mit new arbeiten
    
              for(int i=0; i<Anzahl; ++i) //wieso int i davor machen?
              {
                       cout << "Zahl eingeben: ";
                       cin  >> pZeiger[i]; //nun wird das array, das oben erzeugt
                                           //wurde, aufgefüllt
              }
              int Summe = 0;
              for(int i=0; i<Anzahl; i++)
              {
                        Summe += pZeiger[i]; //und zur summe addiert.
                                             //die stl bietet aber ebenfalls so eine 
                                             //funktion (würd ich verwenden)
              }
    
              cout << "Mittelwert: " << Summe/Anzahl << "\n\n"; //wie man mittelwert berechnet, weißt du, oder?
    
              system("PAUSE"); //eigentlich kein standard c++. benutze
              //cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get()
              //aber für den anfang ist system("PAUSE") auch noch in ordnung...
              //nur nicht angewöhnen, wenn du portabel bleiben willst!
    
              //nachdem hier das programm endet, sollte der speicher, der mit new
              //angefordert wurde auch wieder freigegeben werden:
              delete [] pZeiger;
              return 0; //ist überflüssig
    }
    

    Wenn dir noch was unklar ist, dann sag auch genau, was.

    [ Dieser Beitrag wurde am 17.04.2003 um 13:12 Uhr von davie editiert. ]

    [ Dieser Beitrag wurde am 17.04.2003 um 15:49 Uhr von davie editiert. ]

    [ Dieser Beitrag wurde am 19.04.2003 um 00:05 Uhr von davie editiert. ]



  • Du sollest dich mal instensiv mit Feldern, Zeigern, und dem Operator new beschäftigen.
    eine kurze Einweisung.

    int x[1]; ist ein definition von einem Integerfeld mit 10 elementen.
    Per definition ist x der Zeiger auf den ersten Integer ,(x+1) ist der Zeiger aus das zweite Element usw. x[0] ist der erste Integerwert x[1] der zweite usw.
    wenn nun die größe des feldes erst zur laufzeit bekannt ist, dann kann mann das feld nicht vorher definieren. Dazu gibt es den operator new welcher den speicher reserviert und immer! einen Zeiger aus das erste Element zurückgibt.

    das denke ich ist dein Problem an der funktion.
    ich hoff es war verständlich, wenn nicht, gibt es sehr gute Bücher darüber.



  • du meinst int x[10] und nicht int x[1] 😃
    ein gutes buch ist z.b. gratis zum download frei:
    Bruce Eckel's Thinking in C++ Volume 1 und
    Volume 2
    ist aber leider in Englisch (solltest du aber als [angehender] Programmierer gut beherrschen)



  • k danke für alle Antworten...
    Könnt ihr mir vielleicht noch sagen, obs irgendwo ne gescheite Funktions/Befehlsrefernz für c++ gibt?

    Ich les hier immer beiträge, Wie Strings aus einer Datei lesen etc... Woher kennt irh all diese Funktionen? könnt ihr mir da weiterhelfen?
    Also ich hab hier zu Hause eine für PHP rumstehen, ist halt n komplettes Buch, aber vielleicht gibts ja sowas in der Richtung auch für cpp online als pdf...

    gemuse





  • @davie
    Da ist ein Memoryleak drin. wer mit new[] belegt, muß mit delete[] freigeben. Das letztere taucht aber nirgends auf.



  • hab ich beim kommentieren ganz vergessen.
    muss ich ausbessern!



  • Hab noch n kleines Prob.

    int *pArray = new int[Anzahl];
    

    Warum funktioniert der new Operator eigentlich nur bei Zeigern? Warum könnte ich nicht einfach int variable = new int[Anzahl]; machen?

    Wenn ich das richtig verstanden hab funktioniert der new operator nur mit arrays??? (anders kanns ja eigentlich net gehen oder?)

    gemuse



  • nein, ein einzelnes objekt machst du mit new, mehrere mit new [anzahl]
    new gibt immer zeiger zurück



  • k danke!
    Hab nochmal ne Frage 😃

    Nachdem ich erfahren hab, das system("PAUSE"); nicht gerade c++, wollt ich mal Fragen wie die Alternativen dazu genau funktionieren?

    Wie davie gesagt hat: cin.clear(); cin.ignore(); cin.getline(); etc...

    Was muss ich jetzt genau machen, dass das Dos Fenster nicht einfach verschwindet???

    noch ne Frage, wie kann man eigentlich Text in einem Windows Fenster ausgeben lassen?

    gemuse



  • FAQ lesen:
    Automatisches Schließen verhindern

    und
    http://www.schornboeck.net/ckurs/index.htm

    ist auch noch ein guter C++ Kurs zum Einstieg



  • Original erstellt von davie:
    **

    #include <stdlib>
    

    **

    <cstdlib>

    [ Dieser Beitrag wurde am 18.04.2003 um 20:51 Uhr von nman editiert. ]


Anmelden zum Antworten