2013-02-07 17 views
6

Ich versuche, ein 2D-Array mit einigen Integer zu initialisieren. Wenn ich das Array auf 0 initialisiere, bekomme ich korrekte Ergebnisse, aber wenn ich eine andere ganze Zahl verwende, bekomme ich einige zufällige Werte.memset ein Array zu 1

int main() 
{ 
    int array[4][4]; 
    memset(array,1,sizeof(int)*16); 
    printf("%d",array[1][2]); <---- Not set to 1 
} 
+2

Unter Mac OS X können Sie memset_pattern4, memset_pattern8 oder memset_pattern16 für diese. –

Antwort

10

memset Satz jedes Byte des Arrays 1 nicht jedes int Element.

Verwenden Sie eine Initialisierungsliste mit allen auf 1 gesetzten Werten oder eine Schleifenanweisung, um einen Wert von 1 auf alle Elemente zu kopieren.

4

memset funktioniert nur Byte für Byte. Das Nullsetzen der Bits funktioniert im Allgemeinen, da alle ganzzahligen Nullen im Allgemeinen Nur-Null-Bits sind, so dass das Gruppieren von vier Nur-Null-Bit-Bytes in Nur-Null-Bits int immer noch Null ergibt. Für Dinge, die keine Bytes sind, besteht der einfachste Weg, alle zu initialisieren, lediglich darin, sie alle explizit zu initialisieren.

+0

Vielen Dank für alle Antworten. – user968000

2

memset können Sie einzelne Bytes als Speicher füllen, und Sie versuchen, ganzzahlige Werte zu setzen (vielleicht 4 oder mehr Bytes). Ihr Ansatz wird auf die Zahl nur funktionieren 0 und -1, da diese in binärer beide dargestellt als 00000000 oder 11111111.

Die for-Schleife ist nicht zu viel Mühe:

int main() { 
    int i, val = 1, max = 4; 
    int array[max][max]; 

    max = max * max; 

    for(i = 0 i < max; i++) { 
     array[i] = val; 
    } 
} 
Verwandte Themen