funktion soll sich daten Merken (persistent?)



  • Hallo,

    also ich habe ein Programm das in schleifen durchläuft und immer wieder eine Funktion aufruft und dabei zwei werte übergibt.

    Die aufgerufene Funktion soll die beiden Werte verarbeiten und damit eine
    Tabelle updaten die sie dann aktuell vorhält für den nächsten Durchlauf.
    Diese Tabelle wird also als 2-dimensionales Array verwaltet.

    Allerdings weiß ich nicht als was ich es am besten definiere,
    dass die Daten auch erhalten bleiben, wenn die Funktion beendet wird,
    und beim nächsten Aufruf wieder da sind.

    Reicht da ein static davor in der Funktion ?

    ich versteh da nämlich nicht genau wie das in C ist mit local/global und so ...



  • Reicht da ein static davor in der Funktion ?

    Ja. Aber sinnvollerweise für ein echtes Array und nicht nur einen Zeiger.

    ich versteh da nämlich nicht genau wie das in C ist mit local/global und so ...

    Da bist du hier am rechten Flecken Erde gelandet. Es könnte aber nicht schaden, dazu zu sagen, was du nicht verstehst. Nämlich wird die pauschale Erklärung einfach sein: was in einer Funktion ist, ist lokal, was außerhalb ist, ist global.



  • Jako schrieb:

    Die aufgerufene Funktion soll die beiden Werte verarbeiten und damit eine
    Tabelle updaten die sie dann aktuell vorhält für den nächsten Durchlauf.
    Diese Tabelle wird also als 2-dimensionales Array verwaltet.

    am besten du übergibst der funktion ausser den daten noch einen pointer auf die tabelle. dann kannste sie auch mehrere tabellen bearbeiten lassen und die funktion muss sich nix merken.
    🙂



  • µngbd schrieb:

    Ja. Aber sinnvollerweise für ein echtes Array und nicht nur einen Zeiger.

    hmmm wie meinst du das?

    static double tbl_RCHT[MAX_RC][MAX_VAL]	= {{0}};
    

    passt das ?

    @global/local: ich glaub ich habs jetzt gecheckt. war glaub ich einfach nur von nem Gespräch verwirrt.



  • Jako schrieb:

    µngbd schrieb:

    Ja. Aber sinnvollerweise für ein echtes Array und nicht nur einen Zeiger.

    hmmm wie meinst du das?

    Vergiss das einfach wieder, du hast die Sache schon richtig verstanden. Ich wollte nur vermeiden, dass du einen Zeiger static machst und in dann mit einem Wert von malloc() fütterst.

    static double tbl_RCHT[MAX_RC][MAX_VAL]	= {{0}};
    

    passt das ?

    Keine Ahnung. Aber "persistent" ist es.

    Der Verräter schrieb:

    am besten du übergibst der funktion ausser den daten noch einen pointer auf die tabelle. dann kannste sie auch mehrere tabellen bearbeiten lassen und die funktion muss sich nix merken.

    Genauso würde ich das auch machen.


Log in to reply