2016-04-27 10 views
1

I ein statisches Array in cAnzahl der angegebenen Elemente in einem Array c

int array[15];

Zum Beispiel erzeugt haben, ich die ersten 5 Elemente meiner array "aufgefüllt".

Das bedeutet, dass ich noch 10 freie Elemente habe, oder?

Was soll ich tun, um zu wissen, dass ich bereits fünf Elemente meines Arrays "verwendet" habe? Wie würde ich die Anzahl der Elemente wissen, die ich verwendet habe?

+1

Es ist für Sie zu entscheiden, ob die Werte, die Sie in dem Array haben, gültig sind oder sie nur Junk sind. Es ist immer etwas in Ihrem Array, weil jede Adresse im Speicher etwas enthält. Wenn Sie eine [automatische Variable] (https://en.wikipedia.org/wiki/Automatic_variable) haben, ist der ursprüngliche Inhalt des Arrays das, was sich an der Adresse im Speicher befindet, wo Ihr Array gespeichert ist. Wenn Sie eine [statische Variable] (https://en.wikipedia.org/wiki/Static_variable) haben, ist der Inhalt des Arrays anfänglich Null. – mihai

+0

Wenn Sie erwartet haben, dass das Array dies automatisch für Sie verfolgt, wenn Sie eine Möglichkeit haben möchten, das Array zu "fragen", wie viele Elemente Sie ausgefüllt haben, haben Sie leider kein Glück. Das musst du selbst irgendwie im Auge behalten. (Mit anderen Worten, C-Arrays sind * nicht * C++ std :: vectors.) –

Antwort

3

Was soll ich tun, um zu wissen, dass ich bereits fünf Elemente meines Arrays "verwendet" habe? Woher soll ich die Anzahl der Elemente wissen, die ich benutzt habe?

Es gibt einige Optionen.

  1. Verwenden Sie einen Sentinel-Wert, der die Elemente angibt, die ausgefüllt wurden. Nehmen wir an, Sie verwenden 99999 für den Sentinel-Wert. Wenn das n -te-Element des Arrays den Wert 99999 hat, wissen Sie, dass Sie n-1 Elemente ausgefüllt haben.

  2. Verwenden Sie eine andere Variable, um das zu verfolgen.

    size_t numFilledElements = 0; 
    
    for (...) 
    { 
        // Fill up an element 
    
        // Increment the counter. 
        ++numFilledElements; 
    } 
    

würde Meine persönliche Präferenz für den zweiten Ansatz zu verwenden sein. Dann müssen Sie sich keine Gedanken über einen Sentinel-Wert machen.

+0

In Bezug auf Ansatz 2 (was in der Tat bevorzugt wird), ist es üblich, 'array [numFilledElements ++] = was auch immer' zu schreiben. Eine gute Möglichkeit, den Unterschied zwischen Präfix und Postfix '++' zu verstehen, besteht darin, zu beobachten, warum Postfix '++' hier gewünscht ist, während das Präfix nicht das Richtige tun würde. (Es stellt sich heraus, dass Sie vielleicht Präfix wünschen, wenn Sie ein 1-basiertes Array hatten.) –

+0

@SteveSummit, es ist schwer für mich einzuschätzen, wie häufig es ist, die Einstellung des Wertes des Elements zu kombinieren und den Zähler zu erhöhen eine Aussage, aber ich persönlich teile sie in zwei Aussagen. –

+1

Empfehlen Sie 'size_t' anstelle von' int' für 'numFilledElements'. – chux

Verwandte Themen