An die C/C++ versierten (Array Frage)

  • Hallo zusammen


    Programmiere nach einiger Zeit wieder in C/C++ mit nem uC und hab da ne generelle Frage zu Arrays:


    Wenn ich ein Array (egal wieviele Dimensionen) initialisiere, kann ich das ja z.B. so machen (uint8_t ist ein Datentyp mit nur einem Byte):


    uint8_t test[x]:{0,1,2,3...};
    das geht problemlos


    jetzt aber. wenn ich diesselbe Definition ausserhalb der Initialisierung machen will, gibt mir der Compiler einen Syntaxfehler aus:


    test = {0,1,2,3...};


    geht auch nicht wenn ich den Syntax ein wenig abändere z.B. test[] = oder test [x] =
    es geht natürlich wenn ich direkt auf ein Element im Array zugreife, ich möchte aber mehrere auf einmal definieren können... any ideas ?


    Warum das so ist ?
    Ich habe ne SWITCH/CASE Situation in der ich je nachdem verschiedene Werte in das Array eintrage und ich möchte dies nicht Elementeweise machen müssen, ist eigentlich nur der Schönheit halber.

  • da muss ich dich leider enttäuschen. Das Zuweisen mehrerer Werte auf's mal funktioniert (zumindest bei Ansi C) nur beim initialisieren. Sonst nie.


    Habe ich gerade vor Weihnachten mal nachgeschaut...


    zumindest in C++ könntest du aber eine Methode definieren der du dann imit {0,1,2,3..} Werte übergeben würdest und die dann in ner Schleife diese zuweist.


    Es gäbe da ja auch die Möglichkeit die Methode so zu definieren, dass sie eine beliebige anzahl (gleichartiger) Parameter annimmt. Kommt allerdings AFAIK auf's selbe raus...


    einmal übergibst du sie einfach so method(1,2,3,...); das andere mal method({1,2,3....});

    Marktplatz Bewertung
    Kiste 1: Sloti 800 TB
    Kiste 2: DLT3C @ 2.6GhZ
    ...
    Kiste 7 & Kiste 8: PhII 720BE, 8GB ram. 1x mit X25-m II 80GB & 4870, 1x mit indilinx MLC 32GB

    [SIZE=7]Dieser Beitrag, inkl. vorhandenen Anhängen, ist ungeschützt und könnte während der Übermittlung oder nachträglich von 3. verändert werden. Der Absender schliesst deshalb jede Haftung oder rechtliche Verbindlichkeit für elektronisch versandte Nachrichten aus. Weiter ist der Inhalt des Postings frei erfunden, eventuelle Annäherungen an die Realität sind höchstens unbeabsichtigt und zufällig entstanden. Zu all meinen PCs haben mehrere Leute Zugang und nutzen diesen auch.[/SIZE]

    2 Mal editiert, zuletzt von BLJ ()

  • Nach dem initialisieren geht das meines Wissens nach nur via Einzelzugriff bei C++.


    Da du ja Switch/Case Fälle hast, musst du doch sowieso die Werte mehrfach reinschreiben? Also für jeden Case einzeln. Oder schreibst du dann pro Case das ganze Array neu?


    Du könntest theoretisch ja einfach ein neues Array erzeugen und den Pointer des alten Arrays "umhängen".

  • Ich schreib in jedem Case das gesamte Array neu, das aus folgendem Grund:
    der Mikrocontroller steuert ein GLCD an, das dummerweise aber Character nur seriell entgegennimmt, also muss ich bei Text jeden Character einzeln senden.
    Das kann ich zwar problemlos in einer Schleife machen nur zeigt das GLCD je nach Situation (daher der SWITCH) andere Texte an, die ich dann in ein Array laden kann.
    Andere Methode wäre vermutlich über STRING, und dann die Zeichen einzeln auslesen, die Variante mit je einem einzelnen Array und dann nur zuweisen hat auch was, braucht aber unnötig Speicher (bei nem PC wäre mir das egal, beim uC kanns Probleme geben, da ich den Codeumfang noch nicht abschätzen kann).

  • wenn genügend ressourcen vorhanden sind, würde ich das über einen container der stdlib lösen - vector zb, sonst wie schon erwähnt über eine funktion, die im switch aufgerufen wird und dir dann eine referenz auf den gebauten array aus chars zurückgibt.