Zeiger...



  • *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