Erklärung des (simplen) codes

Gast #3994668
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.
Gast
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
Gast
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.
Gast
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.
Gast
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.
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.. ;-)
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.