initialisieren ein array von ints

Kennt jemand eine Möglichkeit haben, initialisieren Sie ein array von ints (multi-byte-Typ ist in Ordnung wirklich), eine non-null and non -1 Wert einfach? Ich meine, gibt es eine Möglichkeit, dies zu tun in einem one-liner, ohne dass man jedes element einzeln:

int arr[30] = {1, 1, 1, 1, ...}; //that works, but takes too long to type

int arr[30] = {1}; //nope, that gives 1, 0, 0, 0, ...

int arr[30];
memset(arr, 1, sizeof(arr)); //That doesn't work correctly for arrays with multi-byte
                             //  types such as int

Nur zur info, mit memset() in dieser Weise auf statische arrays gibt:

arr[0] = 0x01010101
arr[1] = 0x01010101
arr[2] = 0x01010101

Die andere option:

for(count = 0; count < 30; count++)
   arr[count] = 1;    //Yup, that does it, but it's two lines.

Jemand andere Ideen? Solange es C-code, keine Grenzen der Lösung. (andere libs sind in Ordnung)

  • es gibt wmemset() für "wide" char-arrays
  • würden nicht andere libs benötigen >1 Zeile? #include libother
  • Nicht schlecht... zwei kleine Fragen, Erstens ich verstehe wchar_t is compiler-specific and can be as small as 8 bits damit können einzelne byte. Zweitens, ich hatte gehofft, für etwas, das könnte funktionieren auf verschiedene Arten. Aber kein schlechter Vorschlag. Danke.
  • Mac OS X hat memset_pattern4(), memset_pattern8() und memset_pattern16() seit version 10.5.
  • Touché. Ok, wie wärs mit "1 liner pro Einstellung" wir werden nicht gezählt #includes oder mehrere Optionen zu gcc
  • memset () ", Die funktioniert nicht korrekt für multi-byte-arrays". Wo hast du diese Idee aus? Haben Sie nicht etwas lernen aus dieses (sehr gute) Frage? Ich selbst beantwortet Sie in einem Kommentar dort: "please don' T verwenden Sie die Zeiger-auf-Zeiger-syntax, erstellt segmentiert, multi-dim. arrays, die nicht kompatibel mit... "memcpy, memset".
  • Siehe mein edit, Das ist, was ich meine über die Verwendung memset() nicht richtig funktioniert. Ich will 1, dh 00000001, das ist nicht das, was ich immer bin. Ich bin sicher, es gibt einen offensichtlichen Grund, aber es scheint nur ein set byte Wert
  • in diesem Fall schreiben Sie eine for-Schleife in eine Methode, die eine 'arraySize' int in einer anderen Klasse, und eben auch, dass
  • Ich denke du meinst multi-byte-Werte
  • wenn nur ich hatte einen Mac! Ich habe nur Windows und Linux, gebe ich zu versuchen, meine Frau ein macbook, wenn ich nach Hause komme. Vielen Dank für den input!
  • Irgendwie... aber siehe mein Kommentar zu MarcB die Kette, ich bin auf der Suche nach einer generischen Lösung, memset32 oder memset64 Kräfte meine hand, basierend auf der zugrunde liegenden Architektur.
  • Ein bisschen Modifikation könnte diese Funktion mehr Generika. Würden Sie müssen nur übergeben Sie die Größe Ihrer Daten geben. Oder es könnte möglicherweise herausfinden, auf Ihre eigenen mit so etwas wie sizeof(arr[0]). Ich würde spielen, um mit, um zu sehen, wie schwer das wäre, aber ich denke, es könnte funktionieren.
  • Okay, jetzt verstehe ich das Problem 🙂 Es hat nichts zu tun mit fragmentierten arrays als ich dachte, aber mit der Ausgabe von memset() funktioniert nur auf byte-Ebene. Sowieso, die Schnellste und die meisten generischen Lösung ist die Verwendung einer Reihe von vordefinierten Makros für den Aufbau Ihrer eigenen Initialisierer-Liste. Siehe meine Antwort unten.

InformationsquelleAutor Mike | 2012-11-20
Schreibe einen Kommentar