assegnare lo stesso valore a tutte le int di un array

Buongiorno a Tutti,

riferendomi al void loop o altra funzione:
esiste un "comando" per assegnare lo stesso valore a tutte le int o byte o... di un array, nel caso specifico "0", quindi "false", senza usare il ciclo for?
Scusate se la domanda può risultare "nonsense" ma venendo da programmazione in KOP/FUP, dove il comando esiste, mi è venuto spontaneo cercare di scriverlo anche nello sketch di ARDUINO.
Giuro che prima di postare ho cercato nel forum e fuori dal forum...trovando tante bellissime discussione sulle Array/matrici etc ma senza trovare conferma o smentita per quello che cerco.
grazie

Puoi farlo in fase di dichiarazione:

int array[10] = {0};

In teoria dovresti specificare tutti gli elementi, ma anche specificandone uno solo, quelli mancanti vengono automaticamente inizializzati a 0, per cui l’effetto finale è quello voluto.

Altrimentipuoi usare un ciclo for, appunto, o la funzione memset(), che però richiede la comprensione del concetto di “puntatore” e che, internamente, cosa vuoi che faccia? :wink:

Buongiorno SukkoPera…intanto grazie per la risposta.
se ho ben capito la funzione memset() considerando che ad un certo punto dello sketch ho un array così composta:

int myArray[4]={5,6,7,8};

per portare tutti gli int al suo interno a “0” dovrei scrivere:

int pointer=&myArray;

memset(pointer,0,4);

così il pointer acquisisce la posizione di myArray[0] e con memset() dico:a partire da posizione myArray[0] alloca valore “0” per 4 posizioni contigue…giusto?

... quasi ... ogni "int" occupa DUE bytes quindi tu devi andare a scrivere 0x00 in tutte e 8 le posizioni (4 x 2) di memoria occupate.

Ricorda che memset() NON sa nulla del tipo di dato ... essa scrive direttamente in memoria byte a byte partendo da un punto per quanti bytes gli dici tu.

Inoltre NON ti occorre una variabile per il pointer dato che un "array" (e NON il singolo elemento) è già di persé un pointer:

memset(myArray, 0x00, 8);

Tutto qui :wink:

Guglielmo

Buongiorno Guglielmo,

eh si...ho scritto 4 in quanto ho considerato, sbagliando, le int nell'array e non i bytes in essa.

se possibile chiedo ulteriori chiarimenti: devo obbligatoriamente indicare 0x00 (hex) o posso utilizzare anche b00000000 (bin) oppure 0 (dec) etc?

se ho capito bene in questo caso myArray è un puntatore, nel mio caso, dei 4 int al suo interno e quindi non serve altra istruzione se non

memset(myArray, 0x00, 8);

se invece volessi farlo sulla variabile singola tipo

int singola=5;

dovrei prima del memset() usare un puntatore da inserire poi nella funzione in quanto la variabile singola mi darebbe il suo valore e non la sua posizione... giusto?

Sì, ma puoi farlo "inline" mettendoci una & davanti, non è necessario passare da una seconda variabile esplicitamente di tipo puntatore.

Fermo restando che usare memset() su di un int singolo ha poco senso ;).

Comunque, di solito in funzioni tipo memset(), che lavorano sui byte, per non sbagliare la dimensione si usa l'operatore sizeof:

memset (array, 0, sizeof (int) * 4);

E sì, come vedi puoi usare direttamente 0 in decimale.

ORSO2001:
memset(myArray, 0x00, 8);

.... occhio che in alcuni casi ... anche per UNA sola riga, è d'obbligo usare i tag CODE ... altrimenti, questo è il risultato ... il forum interpreta le sequenze di caratteri come "emoticons" e rende illegibile il codice.

Guglielmo

tutto chiaro; grazie mille per l'aiuto, i suggerimenti e l'insegnamento.