2014-05-07 10 views
6

Jestem początkujący w C i naprawdę potrzebuję skutecznej metody, aby ustawić wszystkie elementy tablicy równe zero lub dowolną taką samą wartość. Moja tablica jest za długa, więc nie chcę tego robić z pętlą for.Jak ustawić wszystkie elementy tablicy na zero lub dowolną taką samą wartość?

+0

Po prostu zapytaj - czy rzeczywiście próbowałeś użyć pętli? Często niepokój związany z wydajnością jest bezpodstawny. Ile elementów ma twoja tablica? Jak często będzie inicjowany? (Jak omówiono w odpowiedziach, będzie to konieczne tylko wtedy, gdy elementy tablicy mają zostać zainicjowane wartością inną niż 0.) –

Odpowiedz

11

Jeśli tablica ma statyczny przydział pamięci, jest domyślnie inicjalizowana do zera. Jeśli jednak tablica ma automatyczną alokację pamięci, możesz po prostu zainicjować wszystkie jej elementy na zero przy użyciu listy inicjalizatorów macierzy, która zawiera zero.

// function scope 
// this initializes all elements to 0 
int arr[4] = {0}; 
// equivalent to 
int arr[4] = {0, 0, 0, 0}; 

// file scope 
int arr[4]; 
// equivalent to 
int arr[4] = {0}; 

Należy pamiętać, że nie istnieje standardowy sposób, aby zainicjować elementy tablicy na wartość inną niż zero używając listy inicjująca, która zawiera pojedynczy element (wartość). Musisz jawnie zainicjować wszystkie elementy tablicy za pomocą listy inicjalizatora.

// initialize all elements to 4 
int arr[4] = {4, 4, 4, 4}; 
// equivalent to 
int arr[] = {4, 4, 4, 4}; 
+0

Standardowa (c99) definicja zgodna 'int x [] = {1, 3, 5}; 'nie liczy się jako inicjalizacja w jednej instrukcji? –

+0

@PeterSchneider Dzięki. Poprawiłem mylącą linię. – ajay

+0

Inicjalizacja jest już omawiana wiele razy. Pytanie brzmi: w jaki sposób przypiszesz te same wartości do tablicy? – overexchange

1

Jeśli twoja macierz jest statyczna lub globalna, inicjalizowana jest do zera przed uruchomieniem funkcji main(). To byłaby najskuteczniejsza opcja.

2
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; // All elements of myArray are 5 
int myArray[10] = { 0 }; // Will initialize all elements to 0 
int myArray[10] = { 5 }; // Will initialize myArray[0] to 5 and other elements to 0 
static int myArray[10]; // Will initialize all elements to 0 
/************************************************************************************/ 
int myArray[10];// This will declare and define (allocate memory) but won’t initialize 
int i; // Loop variable 
for (i = 0; i < 10; ++i) // Using for loop we are initializing 
{ 
    myArray[i] = 5; 
} 
/************************************************************************************/ 
int myArray[10] = {[0 ... 9] = 5}; // This works only in GCC 
2

Możesz użyć zestawu, jeśli jesteś pewien długości.

Zestaw (ptr, 0x00, długość)

Powiązane problemy