Zeiger auf Struct Array



  • Hallo.

    Ich habe eine Menge von Punkten, welche ich in eine Box gepackt habe. Diese wird durch ein Struct repräsentiert welches wie folgt definiert ist:

    public struct TPoint
        {
            public double[] x;
        }
    
        public struct TNode
        {
            public TPoint P;
            public ulong ExternalNumber;
        }
    
        public struct TBBox
        {
            public ulong[] Node;
            public ulong nNode;
    
            public TBBox[] SBox;
    
            public double xmin, xmax, xave;
            public double ymin, ymax, yave;
        }
    

    So eine Box soll also Informationen über die Punkte, welche sie beinhaltet (hier Indizes) und die Abmessungen (wir sind im 2D).
    Darüber hinaus soll so eine Box auch weitere Boxen beinhalten, wobei ein Algorithmus so lange die Boxen unterteilt, bis nurnoch eine gewisse Anzahl von Knoten in einer Box sind (QUADTree Algorithmus).

    Lange Rede kurzer Sinn...

    Ich benötige bei der Unterteilung eine ToDo Liste, welche mir sagt, welche Boxen unterteilt werden müssen. Dabei würde ich am liebsten ein Array von Referenzen auf die bestehenden Boxen, welche ja nicht durch einen Index in einem Array angesprochen werden können, da sie an anderen Boxen hängen, erstellen. Ich komme aus der C-Welt, da ist das mit Zeigern überhaupt kein Problem. Wenn ich aber in C# unsauber programmiere und mit /unsafe kompiliere, bekomme ich es auch nicht hin, da ich kein Array mit einer Adresse auf ein struct erstellen kann. Das heißt:

    ...
    TBBox*[] ToDo = new TBBox*[nNode];
    ...
    

    ...schlägt fehl.

    Ich würde darüber hinaus auch gerne mein Struct TBBox so ändern, dass jede Box auch einen Zeiger auf die "Mutterbox", von welcher sie eine Unterteilung ist, beinhaltet. Kann man "ref TBBox" definieren? Mein Compiler sagt: Nein!
    Auch:

    public struct TBBox
        {
            public ulong[] Node;
            public ulong nNode;
    
            public TBBox[] SBox;
            public TBBox* MBox; //Mutterbox - ERROR!!
    
            public double xmin, xmax, xave;
            public double ymin, ymax, yave;
        }
    

    ...lässt sich so nicht bewerkstelligen.

    Noch einfacher gesagt:
    Ich möchte structs wie Knoten und Boxen nur einmal abspeichern, muss aber von verschiedenen anderen Struchts direkt auf diese zugreifen können - möchte aber keine Kopien davon erzeugen.

    Über ein paar Anregungen würde ich mich freuen.

    Grüße,
    CJens



  • Hat das irgendeinen besonderen Grund, warum du struct statt class benutzt? Weil class = Referenztyp, da hättest du viele Probleme gar nicht.



  • TBBox[] ToDo = new TBBox[nNode];
    

    jetzt hast ein array welches "referenzen" sprich "pointer" in deinem fall vom typ TBBox enthält!

    ToDo[0] = new TBBox(...);
    

    erstellen ein Box object, und die referenz in dein array ablegen

    .. psseude code.. nich getestet..


Anmelden zum Antworten