Wystarczy zmienić memset (arr, -1, sizeof(arr));
Zauważ, że dla innych wartości niż 0 i -1 to nie będzie działać od czasu memset Ustawia wartości bajtów dla bloku pamięci, który rozpoczyna się w zmiennej wskazanej przez *ptr
dla następujących num
bajtów.
void * memset (void * ptr, int value, size_t num);
A ponieważ int
jest reprezentowany na więcej niż jeden bajt, nie dostaniesz żądaną wartość dla liczb całkowitych w swojej tablicy.
Wyjątki:
- 0 jest wyjątkiem, ponieważ jeśli ustawienie wszystkich bajtów 0, wartość będzie zero
- -1 to kolejny wyjątek, ponieważ, jak podkreślił Patrick -1 jest 0xFF (= 255) w int8_t i 0xffffffff w int32_t
powodem masz:
arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0
Ponieważ w twoim przypadku długość int wynosi 4 bajty (reprezentacja 32-bitowa), długość tablicy w bajtach wynosi 20 (= 5 * 4), a tylko 5 bajtów to -1 (= 255) zamiast 20.
może być łatwiejsze do zrobienia: int arr [5] = {-1}; –
@ Tom Dignan: Z wyjątkiem tego, że tylko inicjalizuje pierwszy element do -1, a reszta do 0. – tinman