C'è un modo più semplice in C
per impostare un array su un valore rispetto all'utilizzo di un ciclo for
e andando ad impostare ogni valore uno per uno?Impostazione di un array su un valore
risposta
Se si sta impostando la matrice a tutti i 0 del, o se la matrice è un array di byte, è possibile utilizzare memset
// Set myArray to all 0's
memset(myArray, 0, numberOfElementsInMyArray * sizeof(myArray[0]));
Se è necessario impostare un valore diverso da 0 a unità più grandi di un byte (ad esempio, imposta un array di int
s su 1), quindi non esiste una funzione standard per farlo - dovrai scrivere il tuo loop per quello.
Perché non sostituire numberOfElementsInMyArray con 'sizeof (myArray)/sizeof (myArray [0])' ;-) –
Forse sono solo stupido, ma '1' si adatta a un byte. –
@ Ben Jackson: Perché non funziona se 'myArray' è un puntatore a un array dinamico. –
Dipende dal valore. Se è zero, utilizzare memset(a, 0, sizeof(a))
. Altrimenti, se si tratta di un array di caratteri, è possibile utilizzare memset con un altro valore. Ma memset funziona sempre a livello di char, quindi se il tuo array non è char solo zero probabilmente è significativo.
Se si tratta di una serie di valori di byte, o se si vuole impostare ogni byte ad un valore specifico, è possibile utilizzare memset
:
char xyzzy[100];
int plugh[40];
memset (xyzzy, 7, sizeof (xyzzy)); // all chars set to 7.
memset (plugh, 0x42, sizeof (plugh)); // all integers set to (e.g.) 0x42424242.
Un'altra possibilità è quella di creare un modello di dimensioni corrette al momento di inizializzazione (o inizializzazione reale come di seguito, o in una funzione init
), quindi chiamare memcpy
a blat (a) sull'array reale in un secondo momento.
static int template[] = { 1, 1, 1, 1, 1 };
int zorkmid[3];
memcpy (zorkmid, template, sizeof (zorkmid)); // ensure template is at
// least as big as zorkmid.
Quest'ultimo metodo è utile anche per la compilazione di strutture con un valore pre-calcolata fisso: inizializzare una copia manichino con i campi obbligatori fissati poi memcpy
invece di manualmente l'impostazione di tutti i campi ogni volta che si desidera una nuova istanza .
(a)parte: etimologia del blat
:
Il Jargon file (si veda il glossario per tutte le definizioni) elenca blat
sia come quattro metasyntactic variabile {foo, bar, thud, blat}
, o un sinonimo di blast
, senso 1.
A sua volta, blast
(senso 1) è definito come un sinonimo di BLT
(ovvero non il sandwich), che "si riferiva a qualsiasi operazione di copia o spostamento di grandi bit field".
blat? Puoi fornire una citazione per quel termine? –
Ufficialmente, no. È nel codice sorgente BSD per memcpy IIRC, generalmente utilizzato per un trasferimento di dati più grande del normale. Questo, e grok, sono le mie due parole preferite :-) – paxdiablo
grok è davvero una parola eccellente. Ho trovato una definizione per esplosione in The Jargon File, che a sua volta è elencato come non comune, che elenca blat come una variazione. http://catb.org/jargon/oldversions/jarg231.txt –
È possibile impostare lo stesso valore, ma solo per 0
How to initialize all members of an array to the same value?
inizializzare tutti gli elementi a 0
:
int myArray[10] = { 0 }; // all elements 0
C'è una risposta in quella pagina per gcc pure .
- 1. impostazione richiesta su un array json-schema
- 2. impostazione di un valore XMLConfig
- 3. Impostazione di un valore predefinito in sqlalchemy
- 4. Impostazione valore predefinito di un Html.DropDownList()
- 5. ng-spettacolo basato su un valore attuale in un array
- 6. Oracle: impostazione della sequenza su un valore specifico
- 7. Schema XML: impostazione di un valore predefinito per un complexType?
- 8. Impostazione di un valore in un dizionario python nidificato con un elenco di indici e valore
- 9. Spingendo valore di Var in un Array
- 10. Impostazione DNS su un VPS
- 11. Impostazione di un array di callback e tentativo di utilizzare indice di array come valore in callback
- 12. Impostazione valore falso contro la rimozione di un attributo
- 13. php foreach su un array e l'assegnazione di questo array
- 14. Impostazione valore di una textarea di un modulo HTML?
- 15. VBA - Impostazione di valori di array multidimensionali su una riga
- 16. Impostazione del valore della proprietà sull'istanza figlio su un valore fisso con Autofixture
- 17. Trova l'indice di un valore in un array
- 18. Conversione di un valore UINT16 in un array UINT8 [2]
- 19. Impostazione del valore su null utilizzando jQuery
- 20. Impostazione di una proprietà per riflessione con un valore stringa
- 21. Impostazione di un valore selezionato predefinito in DropDownList in MVC3
- 22. Impostazione del valore selezionato di un elemento Select in Handlebars
- 23. impostazione di un valore di misura su NULL se una dimensione particolare viene utilizzata in excel
- 24. Impostazione di un elemento di matrice come un oggetto Proprietà
- 25. Come ottenere valore casuale da un array
- 26. Come ordinare un array (associativo) per valore?
- 27. Utilizzando un array temporaneo come valore assegnabile
- 28. Impostazione del modello su un QTableWidget
- 29. Aggiungi ad un valore array (1)
- 30. Impostazione Focus su un iFrame in IE
['memset'] (http://opengroup.org/onlinepubs/007908799/xsh/memset.html)? –
A volte 'wmemset' può anche essere utile ..:-) –