- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: in Objekt direkt einen globalen array verwenden, ohne ihn intern zu kopieren?

  1. #11
    HaWe
    Gast
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Du verstehst nicht den Punkt:
    Man kann Varaiblen per * als Pointer übergeben, wie ich es getan habe, oder per & als Referenz (Adresse ), wie du es oben geschrieben hast.
    Zu deinem Vorschlag fehlt aber noch der tatsächlich funktionierende Code zu dem beschriebenen 2-dim array Problem. Hier ist mir noch schleierhaft, wie du einen
    char*mlist[n ] = {"a", "foo", "dfghj",.... }

    referenziert per & an die Objektinstanz übergeben willst, so dass man dort darauf als array
    char list [m ][n ]
    Oder als
    char** list
    zugreifen kann.

    Schreib doch mal bitte diesen genauen, getesteten Code hier rein, wie du das meinst.

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    HaWe, das mag sein.

    Es ist eigentlich ganz einfach. ab 386er/486er aufwärts:

    mov edx, offset meineVariable
    mov bp, SegmentVonVariable

    verschiedene Varianten für den Zugriff:

    mov ax,bp:[edx]
    mov ax,bp:[edx+1]
    mov ax,bp:[edx+bx]

    Entscheidend ist, ob ein Zugriff aus dem aktuellen Segment auf ein anderes überhaupt möglich ist. Das wird im Protected Mode via Descriptoren definiert und der CPU beim Erstellen eines neuen Segments (Programm oder Daten oder Stack) mitgegeben. Stimmen die Privilegien von Aufrufer und Ziel nicht überein, führt das zu einer Ausnahme.

    //-----------------------------------------------------------

    Wie das jetzt hier bei den Kontrollern so ist, weiß ich nicht, so weit habe ich mich dafür noch nicht interessiert. Wie oben in dem Beispiel zu sehen ist, benötigt man die Adresse der Variablen, über indirekte Adressierung kann man dann darauf zugreifen. So kenne ich das. Wenn man in C/C++ eine indirekte Adressierung nur über Pointer-Variablen hinbekommt (bspw: *p), dann ist das so. Wenn Du den Offset der externen Variablen anders dort rein bekommst, auch gut. Aber: die entscheidenden Hinweise sind: "Zeiger" und "&". Ob das ein oder andere für die Lösung des Problems relevant ist, musst Du dann schauen.

    MfG

  3. #13
    HaWe
    Gast
    Also asm hilft hier nun wirklich nicht weiter...
    Mich interessiert nur, wie man es ganz praktisch in C alternativ die Variablenübergabe (in diesem Falle einen 2-dim char array) an eine Funktion per Referenz codiert, so wie du es vorgeschlagen hast, sodass es ebenfalls so wie mit der Übergabe mit Hilfe von Pointern funktioniert.

    global im Hauptprogramm:
    Code:
    char mlist0[6][11] = {"Titel 0","Zeile1","zu menu02>","Zeile3","Zeile4","Zeile5"};
    Und wie muss hier die lokale list innerhalb der Objekt-Funktion defiiniert werden? Die Funktion "weiß" ja zunächst noch gar nicht, wie groß die Dimensionen des Arrays sind, die "6" und die "11" werden der Objekt-Instanz ja erst gesondert bei der Instantiierung mitgeteileilt - daher verwende ich bisher den "Doppel-Pointer" als Platzhalter
    Code:
    class tMenu {
      public:      
         char ** list; 
      //
    }


    (editiert)
    Geändert von HaWe (03.01.2019 um 15:13 Uhr)

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Was immer Du meinst, habe ich mich damit nicht weiter beschäftigt. Gut ist, dass Du es hinbekommen hast!

    Zitat Zitat von HaWe Beitrag anzeigen
    Und wie muss hier die lokale list innerhalb der Objekt-Funktion defiiniert werden? Die Funktion "weiß" ja zunächst noch gar nicht, wie groß die Dimensionen des Arrays sind, die "6" und die "11" werden der Objekt-Instanz ja erst gesondert bei der Instantiierung mitgeteileilt.
    (editiert)
    Vielleicht kann das jemand anders sagen, der da tiefer in C++ drin steckt als ich.
    Aber eines kann ich sagen: Funktionen in OOP, in einem Objekt / einer Instanz davon heißen Methoden.
    Wenn man mit Objekten arbeitet, ist es normal, dass die Speicher fressen, jede Instanz ist eine Kopie - hast Du inzwischen ja auch schon bemerkt. Deshalb muss man sich überlegen, ob das Sinn macht oder ob man auf Objekte verzichtet und ohne OOP mit Funktionen arbeitet. Normalerweise sollte man doch per Bibliothek auch nur Funktionen einbinden können, ohne dass man gleich mit OOP zuschlägt (?).

    MfG

  5. #15
    HaWe
    Gast
    Zitat Zitat von Moppi Beitrag anzeigen
    Vielleicht kann das jemand anders sagen, der da tiefer in C++ drin steckt als ich.
    Aber eines kann ich sagen: Funktionen in OOP, in einem Objekt / einer Instanz davon heißen Methoden.

    MfG
    ja, danke, das hoffe ich auch!
    Immerhin ist die Übergabe-Syntax aber ja grundsätzlich überall gleich, an alle möglichen Funktionen (oder Methoden), und dieser Teil ist plain C Code, nicht C++ spezifisch.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. DCF77 lib ohne Softclock verwenden
    Von elcomportal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 19.06.2012, 20:14
  2. Antworten: 13
    Letzter Beitrag: 22.02.2007, 20:58
  3. Problem mit globalen Array [gelöst]
    Von OnkelTobi im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 25.11.2006, 15:04
  4. Platine in EAGLE kopieren ohne Änderung der Bauteilnummern
    Von chr-mt im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 3
    Letzter Beitrag: 05.08.2005, 12:54
  5. servo direkt an einen Port anschließen?
    Von Zeroeightfifteen im Forum Motoren
    Antworten: 9
    Letzter Beitrag: 18.05.2005, 21:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress