Wie finde ich die Anzahl der Elemente in einem Array?

Lesezeit: 5 Minuten

Benutzeravatar von AndrewP
AndreasP

ich habe ein int Array und ich muss die Anzahl der Elemente darin finden. Ich weiß, dass es etwas damit zu tun hat sizeof aber ich bin mir nicht sicher, wie ich es genau verwenden soll.

  • Schau dir das an. stackoverflow.com/questions/4081100/…

    – twain249

    24. April 2012 um 1:34 Uhr


  • Wenn Sie auf MSVC sind, haben Sie _countof

    – Mahmoud Al-Qudsi

    24. April 2012 um 1:42 Uhr

  • Obwohl jeder die Lösung hat, möchte ich darauf hinweisen, dass es sehr wahrscheinlich ist, dass es keine Möglichkeit gibt, die Größe eines dynamischen Arrays zu ermitteln, es sei denn, Sie haben die Größe aufgezeichnet, da sizeof(a) des Zeigers a die Größe des Zeigers ist int *a = new int[10] in diesem Fall zu finden sizeof(*a) ist 4 Byte. Daher ist es wichtig, die Größe Ihres Arrays zu überprüfen.

    – CppLearner

    24. April 2012 um 2:07 Uhr


Wenn Sie Ihr Array im Geltungsbereich haben, können Sie verwenden sizeof um seine Größe in Bytes zu bestimmen und die Division zu verwenden, um die Anzahl der Elemente zu berechnen:

#define NUM_OF_ELEMS 10
int arr[NUM_OF_ELEMS];
size_t NumberOfElements = sizeof(arr)/sizeof(arr[0]);

Wenn Sie ein Array als Funktionsargument erhalten oder ein Array im Heap allokieren, können Sie seine Größe nicht mit dem bestimmen sizeof. Sie müssen die Größeninformationen irgendwie speichern/übergeben, um sie verwenden zu können:

void DoSomethingWithArray(int* arr, int NumOfElems)
{
    for(int i = 0; i < NumOfElems; ++i) {
        arr[i] = /*...*/
    }
}

Benutzeravatar von shengy
gut

int a[20];
int length;
length = sizeof(a) / sizeof(int);

und Sie können eine andere Möglichkeit verwenden, um Ihren Code nicht fest codiert zu machen int

Sagen Sie, ob Sie ein Array haben array

Sie müssen nur:

int len = sizeof(array) / sizeof(array[0]);

Ich persönlich finde, dass sizeof(a) / sizeof(*a) sauberer aussieht.

Ich ziehe es auch vor, es als Makro zu definieren:

#define NUM(a) (sizeof(a) / sizeof(*a))

Dann können Sie es in for-Schleifen verwenden, also:

for (i = 0; i < NUM(a); i++)

  • Sie könnten dies tun, aber es würde dazu führen, dass die Größe jedes Mal berechnet wird, wenn der Test in der for-Schleife durchgeführt wird, also einmal bei jeder Iteration. Und so würde es jedes Mal durch die Schleife dividieren. Es wäre effizienter, das Ergebnis von zuzuweisen NUM(a) zu einer Instanzvariablen direkt über der Schleife und verwenden Sie diesen Wert in der Schleife.

    – Gawin

    4. März 2014 um 16:42 Uhr

  • @Gavin nein, es würde die Größe nicht für jede Iteration berechnen. Der Compiler ist schlau genug, um zu sehen, dass die Ergebnisse jedes sizeof sowie der Division konstant sind, und bestimmt das Ergebnis zur Kompilierzeit, das er anschließend als konstante Zahl in den Code kompiliert. Möglicherweise haben Sie sich vom Aussehen der täuschen lassen sizeof Anwendung, die aufgrund der Klammern wie eine Funktion aussieht, aber keine Funktion ist. sizeof ist ein Operator und die Klammern sind nur eine Konvention.

    – blubberdiblub

    27. September 2016 um 22:17 Uhr


Benutzeravatar von Shyam
Schyam

Es ist nicht möglich, die Anzahl der Elemente in einem Array zu ermitteln, es sei denn, es handelt sich um ein Zeichenarray. Betrachten Sie das folgende Beispiel:

int main()
{
    int arr[100]={1,2,3,4,5};
    int size = sizeof(arr)/sizeof(arr[0]);
    printf("%d", size);
    return 1;
}

Der obige Wert gibt uns den Wert 100, selbst wenn die Anzahl der Elemente fünf ist. Wenn es sich um ein Zeichenarray handelt, können Sie am Ende des Arrays linear nach der Nullzeichenfolge suchen und den Zähler beim Durchlaufen erhöhen.

Benutzeravatar von Noman
Kein Mann

In Wirklichkeit können wir nicht zählen, wie viele Elemente im Array gespeichert sind

Aber Sie können die Länge oder Größe des Arrays mit dem sizeof-Operator finden.

Aber warum können wir nicht finden, wie viele Elemente in meinem Array vorhanden sind.

Denn wenn wir einen Array-Compiler initialisieren, geben Sie unserem Programm Speicher wie a[10] (10 Blöcke der Größe 4) und jeder Block hat einen Müllwert, wenn wir einen Wert in einen Index wie a setzen[0]=1,a[1]=2,a[3]=8; und andere Block hat Müll Wert Niemand kann sagen, welcher Wert Müll ist und welcher Wert kein Müll ist Aus diesem Grund können wir nicht berechnen, wie viele Elemente ein Array enthält. Ich hoffe, dies hilft Ihnen zu verstehen. Kleines Konzept

Supereinfach.

Teilen Sie einfach die Anzahl der zugewiesenen Bytes durch die Anzahl der Bytes des Datentyps des Arrays mit sizeof().

Zum Beispiel ein Integer-Array namens gegeben myArray

int numArrElements = sizeof(myArray) / sizeof(int);

Wenn der Datentyp Ihres Arrays nicht konstant ist und sich möglicherweise ändern könnte, verwenden Sie für den Divisor in der Gleichung die Größe des ersten Werts wie die Größe des Datentyps.

Zum Beispiel:

int numArrElements = sizeof(myArray) / sizeof(myArray[0]);

Auf diese Weise ist der Code typunabhängig und funktioniert unabhängig vom Datentyp des Arrays ordnungsgemäß.

Ich habe den folgenden Code wie oben vorgeschlagen verwendet, um die Anzahl der Elemente in meinem zweidimensionalen Array auszuwerten:

#include <stdio.h>
#include <string.h>

void main(void)
{
    char strs[3][20] =
    {
        {"January"},
        {"February"},
        {""}
    };

    int arraysize = sizeof(strs)/sizeof(strs[0]);

    for (int i = 0; i < arraysize; i++)
    {
        printf("Month %d is: %s\n", i, strs[i]);
    }

}

Es funktioniert gut. Soweit ich weiß, können Sie in C-Arrays keine verschiedenen Datentypen verwechseln, und Sie sollten auch die gleiche Größe aller Array-Elemente haben (wenn ich recht habe), daher können Sie dies mit diesem kleinen Trick ausnutzen:

  1. Zähle die Anzahl der Bytes mit der Funktion sizeof() aus dem ganzen 2D-Array (in diesem Fall 3*20 = 60 Bytes)
  2. Zähle die Anzahl der Bytes mit der Funktion sizeof() vom ersten Array-Element strs[0] (in diesem Fall 20 Bytes)
  3. Teilen Sie die gesamte Größe durch die Größe eines Elements, was Ihnen die Anzahl der Elemente ergibt

Dieses Snipped sollte für 2D-Arrays in C portierbar sein, aber in anderen Programmiersprachen könnte es nicht funktionieren, da Sie verschiedene Datentypen innerhalb von Arrays mit unterschiedlichen Größen verwenden können (wie in JAVA).

1417620cookie-checkWie finde ich die Anzahl der Elemente in einem Array?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy