mikrocontroller.net

Forum: Compiler & IDEs Arrayy Initialisieren


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wie kann ich wenn ich ein Array initialisiere allen Elementen einen Wert 
zuweisen z.B. 0

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn ich ein array habe:

int array[100] = {0,0,0,0,...,0}

also muss ich da 100 0en schreiben oder geht das auch kürzer?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for(i=0; i<100; i++) array[i]=0;

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so:

int array[100];
for (i=0;i<100;i++)
{array[i]=0;
}

Global definierte Arrays sind nach dem anlegen bereits mit 0 
initialisiert

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich wollts halt nur gern vorher machen also nicht erst wärend der 
laufzeit...

Autor: Fritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
static int feld[100];

Statische Variable werden mit 0 initialisiert.

Gruß
Fritz

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder falls es eine lokale Variable ist:

int a[100] = {0};
// oder sogar, wenn man tippfaul ist
int a[100] = {};

Das funktioniert, weil nicht-initialisierte Array-Eintraege automatisch 
mit 0 initialisiert werden, sofern in der Deklaration irgendeine 
Initialisierung angegeben ist. Bei

int a[100];

werden die Eintraege also nicht mit 0 intialisiert.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur, weil's noch keiner geschrieben hat: memset() kann auch helfen.
(Was anderes macht der Compiler auch nicht.)

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christoph
stimmt, wird aber zur laufzeit gemacht
static int wird dafür executable aufblähen

ich würde diesen tradeoff klar für runtime entscheiden

grüsse, daniel

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> stimmt, wird aber zur laufzeit gemacht
> static int wird dafür executable aufblähen

Nein, das wird auch zur Laufzeit gemacht. Statische Variablen, die nicht 
oder mit 0 initialisiert werden, landen im Segment .BSS, das vom 
Startup-Code vor main() "ausgenullt" wird.

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man lernt nie aus^^
allerdings wenn ich richtig weiss reden wir "wie es gcc" macht
ich glaub kaum, dass C stdandard je soweit gehen würde über
segmente zu reden. (oder auch stack)

schöne grüsse, daniel

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> allerdings wenn ich richtig weiss reden wir "wie es gcc" macht

Naja, wir sind in einem GCC-Forum.

> ich glaub kaum, dass C stdandard je soweit gehen würde über
> segmente zu reden. (oder auch stack)

Dann glaubst du richtig. Wie die Null-Initialisierung durchgeführt wird, 
bleibt natürlich voll und ganz dem Compiler überlassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.