# Array Elemente zählen



## EddieG (24. März 2010)

Hi,
ich habe ein kleines Problem und werde nicht wirklich fündig.
Ich möchte die anzahl der elemente innerhalb meines Array's ausgeben lassen. Bekomme jedoch ein Falsches Ergebnis

```
int werte[2][3] = {
{4,4,5},{0}
        
    };
    
    cout << "laenge von array"<<sizeof(werte)/sizeof(int);
```
Die ausgabe ist 6 aber wie wir sehen, sind es bloß 4. 
Gibt es noch eine andere möglichkeit als sizeof ?


----------



## Cromon (24. März 2010)

Die Ausgabe 6 ist korrekt. Du hast 6 mögliche Werte in deinem Array.


----------



## EddieG (24. März 2010)

hm ich möchte aber bloß, die Anzahl der vorhanden Elemente ermitteln.


----------



## deepthroat (24. März 2010)

EddieG hat gesagt.:


> hm ich möchte aber bloß, die Anzahl der vorhanden Elemente ermitteln.


Es sind immer alle Elemente vorhanden.

Und es gibt keine Möglichkeit ausschließlich die Anzahl der explizit initialisierten Elemente zu ermitteln.

Außerdem kann man kein zerklüftetes (jagged) statisches Array erstellen.

Gruß


----------



## ComFreek (24. März 2010)

Meinst du die Menge der von dir initialisierten Variablen?
Also ein _int_ wird automatisch mit 0 initialisiert. (soweit ich weiß) Deshalb gibt es glaube ich keine Funktion, die das überprüfen kann, ob eine Variable gesetzt oder ungesetzt ist.


----------



## vfl_freak (24. März 2010)

Moin,



EddieG hat gesagt.:


> hm ich möchte aber bloß, die Anzahl der vorhanden Elemente ermitteln.



Dann lauf' halt in einer Schleife über das Array und zähle händisch alle Elemente, deren Wert UNGLEICH dem Initialwert (vermutlich ja '0', oder?) sind ...

Gruß
Klaus


----------



## Jennesta (24. März 2010)

Hi, du wirst nicht darum kommen "leere" Felder mit bestimmten Zahlen oder Zeichen vorbelegen zu müssen und diese hinterher beim Zählen auszusortieren.

Nur weil du die entsprechende Arrayposition nicht belegt hast, heißt es nicht, dass sie nicht existiert. Ein Array ist ein Verbung von aufeinanderfolgenden Speicherstellen. Nun ist der Speicher zwar reserviert für das Array, aber kann irgendwelche Werte enthalten, sein es Werte, die vorher mal von irgendeinem anderen Programm an diese Speicherstelle geschrieben wurden oder einfach nur da sind, das ist eigentlich auch egal. Jedenfalls werden diese auch gezählt.


----------



## EddieG (25. März 2010)

Ich hätte dennoch eine kleine Frage zu array's im allgemeinen.
Ist es nicht möglich, einen array innerhalb einer Methode zu erstellen? Der Feldindex ist der ein Wert, welcher der Methode übergeben wird.

ich habe so etwas versucht es geht aber nicht.

```
#include <iostream>

using namespace std;
class Berechnung{

public:
    void setiArrayFelderAnz(int a)
    {
        if(a>0)
        int iArr[a];

        cout << "die Felder Anzahl ist: "<< (sizeof(iArr)/sizeof(int));
        cout << a;
    }
    
};

void main()
{
    Berechnung *integer = new Berechnung;
    int wert;
    cout << "Bitte gegeben Sie die Array größe ein: " << endl;
    cin >> wert;
    *integer->setiArrayFelderAnz(wert);
    //bla
    system("pause");
}
```



> Konstanter Ausdruck erwartet
> Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
> 'iArr': Unbekannte Größe
> 'iArr': nichtdeklarierter Bezeichner
> ...


----------



## Cromon (25. März 2010)

Dynamische Arrays können nicht auf dem Stack erstellt werden, das Stackframe kann im Prolog sonst ja nicht erstellt werden. Die Grösse des Arrays muss zu Kompilierzeit bekannt sein.

Wenn du es dynamisch erstellen willst musst du new verwenden:
int* pArray = new int[a];

...
delete [] pArray;


----------

