2013-02-07 10 views
6

Próbuję zainicjować tablicę 2d z pewną liczbą całkowitą. Jeśli zainicjuję tablicę do 0 Otrzymuję poprawne wyniki, ale jeśli użyję jakiejś innej liczby całkowitej, otrzymam kilka losowych wartości.memset tablica do 1

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

W systemie Mac OS X, można użyć memset_pattern4, memset_pattern8 lub memset_pattern16 do tego. –

Odpowiedz

10

memset zestaw każdy bajt macierzy do 1 nie każdy int elementu.

Użyj listy inicjalizacyjnej ze wszystkimi wartościami ustawionymi na 1 lub instrukcją pętli, aby skopiować wartość 1 do wszystkich elementów.

4

memset działa tylko w kolejności bajt po bajcie. Zerowanie bitów działa w ogólności, ponieważ wszystkie zera całkowite są zwykle zerowymi bitami, więc grupowanie czterech całych zero-bajtowych bajtów w jeden cały zero-bitowy int nadal daje zero. Jednak dla rzeczy, które nie są bajtami, najprostszym sposobem zainicjowania ich wszystkich jest jawne zainicjowanie ich wszystkich.

+0

Dziękuję za wszystkie odpowiedzi. – user968000

2

memset pozwala wypełnić poszczególne bajty jak pamięć i próbuje ustawić wartości całkowite (może 4 lub więcej bajtów). Twoje podejście będzie działać tylko na liczbie 0 i -1 jak są one zarówno reprezentowana binarnie jako 00000000 lub 11111111.

Pętla for nie jest zbyt wiele przeszkadzało:

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

    max = max * max; 

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