Pointer - Array - Zählen



  • Hi Leute,
    hab folgendes Problem:

    Ich möchte gerne an eine Funktion ein Array übergeben und als Rückgabe die Anzahl der Werte im Array bekommen.
    Als Beispiel habe ich ein Int-Array gehält.

    /* Funktion zum Zählen */
    int count(int *array)
    {
      return (sizeof(array)/sizeof(int));
    }
    
    /* main */
    int main(void)
    {
      int zahlen[5];
      zahlen[0] = 23;
      zahlen[1] = 3443;
    
      printf("%i",count(zahlen));
    
      return 0;
    }
    

    Es müsste ja theoretisch das Ergebnis 2 kommen, aber es kommt leider 1. Weil er für die größe immer 4 ermittelt, als hätte das Array nur eine Stelle. Wenn ich sizeof im Main Programm mache, dann kommt 20, also 5 * 4.
    Habe sizeof mal verwendet und da hat es geklappt, aber da war es auch ein Char-Array und kein Int-Array

    Noch eine weitere Frage:
    Muss ich an die FUnktion zahlen oder &zahlen übergeben?
    Habe das zwar getestet und bei beiden Möglichkeiten kam die gleiche Adresse raus.





  • Du übergibts nicht das array sondern nen pointer
    sizeof(int*) == sizeof(int) == 4 (meistens)



  • girly schrieb:

    Du übergibts nicht das array sondern nen pointer
    sizeof(int*) == sizeof(int) == 4 (meistens)

    Sofern "meistens" für "32-Bit-Prozessor" seht, ist die Aussage korrekt ;).

    Gruß Caipi



  • gut, und wie kann ich jetzt nun die Elemente eines Arrays zählen?
    Außer, das ich das beim einlesen mitzähle und dann immer übergeben muss.

    so in der Richtung wie in PHP mit count(array)F



  • Du willst also nicht die Anzahl der reservierten Elemente, sondern die Anzahl der tatsächlich "eingegebenen" Werte? Dann musst du einen Zahlenwert (z.B. 0, INT_MIN, INT_MAX) als "Nicht"-Wert definieren und in der Funktion count() halt alle Elemente auf diesen "Nicht"-Wert überprüfen und gegebenenfalls einer Zähler inkrementieren.



  • wah! nein!

    > Außer, das ich das beim einlesen mitzähle und dann immer übergeben muss.
    einzige moeglichkeit.
    du musst schon beim einlesen einen counter mitnehmen, den du dann spaeter an deine funktion uebergibst. anders kriegst du die anzahl der elemente eines arrays nicht raus, punkt.


Anmelden zum Antworten