Forum: PC-Programmierung Erklärung des (simplen) codes


von Sven (Gast)


Lesenswert?

Hallo, ich habe eine Frage zur Lösung dieser Aufgabe:

// AUFGABE 6: Ein Integervektor wurde folgendermaßen deklariert: int 
zahl[3];. Der zweiten Komponente dieses Vektors soll der Wert 2015 
zugewiesen werden.
// Wielautet die zugehörige Anweisung?

      // Lösung AUFGABE6:

   //    #include <stdio.h>
    //
    //void main(void)
    //{
     // int zahl[3]={0};
     // zahl[1]=2003;
     // printf("%d %d %d",zahl[0],zahl[1],zahl[2]);
    //}

Kann mir bitte jemand erklären, wieso die Lösung so ist? Diese habe ich 
leider nicht verstanden. Wieso zahl[1]=2003 ? und wieso das ={0} bei 
zahl[3]?

Vielen Dank im Vorraus.

von Michael M. (eos400dman)


Lesenswert?

Hallo,

Sven schrieb:
> Wieso zahl[1]=2003 ?
Ich vermute mal das ist ein Schreibfehler und soll 2003 sein.

> und wieso das ={0} bei
Das Setzt den ganzen Vektor bzw. Array auf 0.

Viele Grüße Michael

von Dennis (Gast)


Lesenswert?

Michael Mayer schrieb:
>> Wieso zahl[1]=2003 ?
> Ich vermute mal das ist ein Schreibfehler und soll 2003 sein.

:-) Mein Vorredner meinte wohl: ..soll 2015 sein

von Dennis (Gast)


Lesenswert?

Aber mal von ganz vorn:

Bei Vektoren begginngt man bei 0 zu zählen, d.h. dein erstes Element ist 
dann:

zahl[0]

folglich dein zweites Element: zahl[1]

diesem weist man den Wert zu:

zahl[1] = 2015

von Sven (Gast)


Lesenswert?

Michael Mayer schrieb:
>> Wieso zahl[1]=2003 ?
> Ich vermute mal das ist ein Schreibfehler und soll 2003 sein.

Danke für deine Antwort, Michael. Diesen Teil habe ich nicht verstanden.

müsste es nicht heißen:

int zahl[3]={0};
int zahl[1]={2015};


?

von Fachmann (Gast)


Lesenswert?

Das ist ein array von drei Elementen. int zahl[1] kann jeden Wert 
annehmen.
das hier ist die inizialisierung.
// int zahl[3]={0};
aber es sollte so aussehen
int zahl[3]={0,0,0}; // alle auf 0 gesetzt.

von Halbsoschlimmer (Gast)


Lesenswert?

Sven schrieb:
> müsste es nicht heißen:
>
> int zahl[3]={0};
> int zahl[1]={2015};

Nein, denn so definierst du ja zwei Arrays mit dem gleichen Namen. Die 3 
ist ja hierbei nicht der Index, sondern die Größe des Arrays.
Wenn du es dann benutzt

zahl[1]=2015;

ist der Wert in den eckigen Klammern der Index (in diesem Fall 0 bis 2). 
Die eckigen Klammern haben also bei der Definition und beim Zugriff eine 
unterschiedliche Bedeutung.

von icke (Gast)


Lesenswert?

Nein,

das
1
 int zahl[3]={0};
heisst soviel wie
1
 int zahl[3];
2
zahl[0] = 0;
3
zahl[1] = 0;
4
zahl[2] = 0;
Da ist nur eine verkürzte Schreibweise.

stell dir
1
zahl[1]
 als eine normale integer-Variable vor. Da machst du die zuweisung ja 
auch ohne geschweifte klammern.

von Dennis S. (eltio)


Lesenswert?

Die erste Zeile definiert ein Array mit 3 Speicherzellen und setzt diese 
alle auf 0. Die zweite Zeile (ohne Klammern) ist eine Zuweisung die sich 
nur auf das zweite Element bezieht.

Gruß
Dennis

P.S.: "Icke" war schneller und hat es noch schöner beschrieben.. ;-)

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Allgemein sind zu unterscheiden:

Typ Name = Wert; // Definition einer Variblen mit Initialisierung
Name = Wert; // Zuweisung

Bei der Definition wird eine neue Variable angelegt, bei der Zuweisung 
nur einer schon existierenden ein neuer Wert gegeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.