Informatik: Array

orluk

Guest
Folgendes einfaches c++ Programm
Code:
#include <iostream>
using namespace std;

int main()
{
    int array[10];
    int i;
    
    for(i=0;i<10;++i)
    {
        array[i]=i;
    }
    
    for(i=0;i<10;++i)
    {
        cout<<array[i]<<"\n";
    }
    
    cin.get(); cin.get();
}

Das ist eigentlich ja ganz einfach. Trotzdem verstehe ich nicht warum die Zahlen 0-9 ausgegeben werden undn nicht 1-10. Ich meine, i hat ja anfangs den Wert 0, also ist i kleiner als 10. i wird um 1 erhöht und die Schleife wird ausgeführt.
Da i jetzt um eins erhöht worden ist (i=1), sollte doch jetzt der Wert 1 in das 1. Element (Das Array beginnt mit dem 0.) des Arrays eingetragen werden.
Das ist aber nicht der Fall... :confused:
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
beim ersten schleifendurchlauf ist i = 0, beim letzten ist i = 9 - die erhöhung von i findert erst nach dem ersten durchlauf statt. Wäre dem nicht so, wäre ja auch die array mit falsch und der code würde einen index-overflow werfen. Hätte man sich aber auch selbst überlegen können -_-
 

orluk

Guest
Original geschrieben von voelkerballtier
beim ersten schleifendurchlauf ist i = 0, beim letzten ist i = 9 - die erhöhung von i findert erst nach dem ersten durchlauf statt. Wäre dem nicht so, wäre ja auch die array mit falsch und der code würde einen index-overflow werfen. Hätte man sich aber auch selbst überlegen können -_-


Ja aber wieso findet es denn erst nach dem ersten Durchgang statt? Ich habe ja "++i" geschrieben. Was heisst, das zuerst 1 zu i addiert wird und dann der Wert genommen wird. Eigentlich sollte es ja nur mit "i++" gehen. Dann würde erst der Wert 0 genommen werden und erst dann 1 addiert werden.
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
wie wärs wenn du dir mal eine dokumentation zur for-schleife in c++ durchliest? Die Erhöhung wird immer am Ende eines Schleifendurchlaufs ausgeführt, völlig egal ob deine ++ vor oder nach dem i stehen.......
 

killerchicken_inaktiv

Guest
orluk: Du verstehst da ++ ein wenig falsch.

int i = 0;

int j = ++i; // Hier wird i um 1 erhöht, danach das ganze an j zugewiesen, (j = 1)

int k = i++; //Hier wird zuerst i an k zugewiesen, dann i um eins erhöht, (k = 1)

schreibt man alles auf folgende Weise (wies auch in der for-Schleife im Endeffekt drinsteht), passiert was anderes:

int i = 0;

++i; // i um 1 erhöhen

int j = i; (j = 1)

i++; // i um 1 erhöhen

int k = i; // i um 1 erhöhen (k = 2)

Gruß
Sebastian
 

ROOT

Technik/Software Forum, Casino Port Zion
Mitglied seit
17.11.2002
Beiträge
7.030
Reaktionen
21
Ort
MS
Oh noes, eine Mainfkt. ohne Return :8[:
 

Aule2

Guest
Original geschrieben von killerchicken
orluk: Du verstehst da ++ ein wenig falsch.
zur For schleife:
for (Startwert ; Bedingung für i; Funktion f ):=
BEGIN
i:=Startwert
WHILE Bedingung(i) DO
ANWEISUNGEN
f(i)
DONE
END
Daher ist es egal, ob Du i++ oder ++i verwendest ;)
 

orluk

Guest
Ok, bei einer For-Schleife wird der Wert also immer erst erhöht wenn die Anweisungen ausgeführt wurden. Wäre das bei einer While Schleife anders?
Und noch eine kleine Frage nebenbei: Kann eine Funktion 2 oder mehr Werte zurückliefern?
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Ja, bei einer While-schleife währe da anders. aber nur bei while () { }, nicht bei do { } while().
Mehrere Rückgabewerte: Du kannst einen Zeiger auf ein struct zurückliefern. Oder Du rufst die Funktion mit Zeigern als Parameter auf. Das müßte unter call-by-reference laufen.
 

voelkerballtier

Coverage, Staff, Coding
Mitglied seit
01.12.2003
Beiträge
1.603
Reaktionen
0
bei einer while-schleife wird überhaupt nix erhöht. du solltest WIRKLICH erstmal ein paar elementare Einführungen in die Programmierung lesen -_-
 

orluk

Guest
Original geschrieben von voelkerballtier
bei einer while-schleife wird überhaupt nix erhöht. du solltest WIRKLICH erstmal ein paar elementare Einführungen in die Programmierung lesen -_-

Zum Beispiel?

e: Ja, natürlich erhöht die Schleife nichts. Aber der Anweisungsblock der Schleife, wenn man das so will.
 

orluk

Guest
Die Frage mit der Funktion hat sich erübrigt. Ich bin gerade in das Kapitel "Referenzen" vorgestossen.
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Original geschrieben von voelkerballtier
bei einer while-schleife wird überhaupt nix erhöht. du solltest WIRKLICH erstmal ein paar elementare Einführungen in die Programmierung lesen -_-
Stimmt selbstverständlich. Weil voher die for-Schleife Thema war, bin ich von einem while (n < i++) oder Ähnlichem ausgegangen.
 
Oben