it-swarm.com.de

Array-Initialisierung mit {0}, {0}?

Angenommen, ich möchte myArray initialisieren

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

Sind sie alle gleich oder einem anderen vorgezogen?

Vielen Dank

30
eugene

Sie sind in Bezug auf den generierten Code (zumindest in optimierten Builds) gleichwertig, da bei der Initialisierung eines Arrays mit der {0}-Syntax alle nicht explizit angegebenen Werte implizit mit 0 initialisiert werden und der Compiler ausreichend über den Aufruf von memset informiert ist.

Der einzige Unterschied ist also stilistisch. Die Auswahl hängt von dem verwendeten Codierungsstandard oder Ihren persönlichen Vorlieben ab.

20

Eigentlich empfehle ich persönlich:

char myArray[MAX] = {};

Sie alle machen dasselbe, aber ich mag dieses besser. es ist das knappste. = D

Übrigens: beachte dass char myArray[MAX] = {1}; nicht alle Werte auf 1 initialisiert! Es initialisiert nur den ersten Wert auf 1 und den Rest auf Null. Aus diesem Grund empfehle ich Ihnen, char myArray[MAX] = {0}; nicht zu schreiben, da es für manche Leute ein bisschen irreführend ist, obwohl es korrekt funktioniert.

31
Mehrdad

Ich denke, die erste Lösung ist am besten.

char myArray[MAX] = {0};  //best of all
4
Nawaz

Beide können verwendet werden 

Aber ich fühle das unten verständlicher und lesbarer .. 

  char myArray[MAX]; 
  memset(myArray, 0, MAX);
1
Jhaliya

Angenommen, Sie möchten immer mit 0 initialisieren.

-> Ihr erster und zweiter Weg sind gleich. Ich bevorzuge den ersten.

-> Der dritte Weg von memset() sollte verwendet werden, wenn Sie andere Nullen als die Initialisierung zuweisen möchten.

-> Wenn erwartet wird, dass dieses Array nur einmal initialisiert wird, können Sie das static-Schlüsselwort voranstellen, sodass der Compiler die Aufgabe für Sie erledigt (kein Laufzeit-Overhead).

1
iammilind

Sie können auch bzero fn verwenden (schreibe nullwertige Bytes)

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero

0