2013-02-07 10 views
6

Sto provando a inizializzare un array 2d con alcuni interi. Se inizializzo l'array su 0 ottengo risultati corretti ma se uso qualche altro numero intero ottengo dei valori casuali.memset un array su 1

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

In Mac OS X, è possibile utilizzare memset_pattern4, memset_pattern8 o memset_pattern16 per questo. –

risposta

10

memset insieme ogni byte della matrice di non 1 ogni int elemento.

Utilizzare un elenco di inizializzazione con tutti i valori impostati su 1 o un'istruzione loop per copiare un valore di 1 in tutti gli elementi.

4

memset funziona solo byte per byte. L'azzeramento dei bit funziona in generale perché tutti gli zeri integrali sono in genere tutti a zero bit, quindi raggruppando quattro byte all-zero-bit in un bit tutto-zero int fornisce ancora zero. Per cose che non sono byte, però, il modo più semplice per inizializzarle tutte è solo inizializzarle tutte in modo esplicito.

+0

Grazie per tutte le risposte. – user968000

2

memset consente di riempire byte individuali come la memoria e si sta cercando di impostare valori interi (forse 4 o più byte.) Il suo approccio funziona solo sul numero 0 e -1 come questi sono entrambi rappresentati in binario come 00000000 o 11111111.

Il ciclo non è troppo fastidio:

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

    max = max * max; 

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