Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Von C nach Delphi: Benötige Hilfe (https://www.delphipraxis.net/143840-von-c-nach-delphi-benoetige-hilfe.html)

Jazzman_Marburg 24. Nov 2009 14:09


Von C nach Delphi: Benötige Hilfe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mahlzeit!

Ich möchte einen Teil eines C-Programms nach Delphi konvertieren, aber habe Probleme mit den im C-Teil ab- und an vorkommenden Pointern. Mir ist klar, dass ich auch in Delphi Pointer direkt nutzen kann -- aber da ich sie bisher noch nie gebraucht habe (jedenfalls nicht explizit) wäre es natürlich schön, wenn ich sie nun auch vermeiden könnte.
Es geht schon los mit folgendem:

/* Type declarations for the postfix string, stored in a binary tree */

typedef struct tnode {
int key; /* leaf value */
char op; /* internal node operator */
struct tnode *left, *right; /* left and right children */
} treenode, *treeptr;

/* Type declarations for base modules information */

typedef struct rectangle {
float area; /* rectangle area */
float height; /* rectangle height */
float width; /* rectangle width */
int fixed; /* fixed orientation if == 1 */
treeptr ptr; /* pointer to a tree node */
} base_rectangle;

Wie setze ich treeptr_ptr um?
In Delphi werden die beiden struct wohl RECORDS werden -- aber *left und *right, und *treeptr ?!

Kann da jemand behilflich sein?
Geht das übrhaupt -- auf die expliziten Pointer verzichten, oder muß man dann das ganze Programm komplett umschreiben?
(Achso, nur zum Verständnis: Es geht um binäre Bäume -- falls es jemandem für das Verständnis hilft, das 150 Zeilen C-Programm habe ich hochgeladen.)

Vielen Dank & Tschöh
Jazzman

Medium 24. Nov 2009 14:12

Re: Von C nach Delphi: Benötige Hilfe
 
Bei der Umsetzung mit Records wirst du nicht auf ausgeschriebene Pointer verzichten können. Wenn du nicht 1:1 umsetzen musst, sondern auf Klassen gehen könntest, wäre das schmucker.

himitsu 24. Nov 2009 14:18

Re: Von C nach Delphi: Benötige Hilfe
 
Code:
type name   =  Name: Type;
type *name  =  Name: ^Type;  =  Name: PType[color=#008000]{ein Pointer}[/color];
Code:
typedef struct tnode {
  int key; /* leaf value */
  char op; /* internal node operator */
  struct tnode *left, *right; /* left and right children */
} treenode, *treeptr;
Delphi-Quellcode:
type
  PTreeNode = ^TTreeNode;
  TTreeNode = record
    key: Integer; // leaf value
    op: Char;    // internal node operator
    left, right: PTreeNode; // left and right children
  end;

Mithrandir 24. Nov 2009 14:23

Re: Von C nach Delphi: Benötige Hilfe
 
Delphi-Quellcode:
PTreeNode = TTreeNode;
Haste da nicht ein "^" vergessen?

himitsu 24. Nov 2009 14:28

Re: Von C nach Delphi: Benötige Hilfe
 
nööööööööö :angel2:

Mithrandir 24. Nov 2009 14:32

Re: Von C nach Delphi: Benötige Hilfe
 
:mrgreen:

Jazzman_Marburg 24. Nov 2009 14:36

Re: Von C nach Delphi: Benötige Hilfe
 
Sorry Jungens -- aber ich verstehe eure interne Debatte nicht:
Was hat es mit:
PTreeNode = TTreeNode;
und einem (nicht) vergessenen ^ auf sich?

(bin nur ein wenig irritiert)

Danke & Gruß
Jazzman

mleyen 24. Nov 2009 14:45

Re: Von C nach Delphi: Benötige Hilfe
 
1. himitsu hat den dereferenzierungsoperator ^ vergessen.
2. Daniel G hat ihn darauf hingewiesen.
3. himitsu hat es klammheimlich wegkorrigiert (editiert) und ironischerweise behauptet es wäre schon richtig gewesen.
4. Daniel G hat himitsu darauf hingewiesen, das er den Scherz verstanden hatte.

:cheers:

OnT:
Ich würde mir doch lieber 'kurz' die Zeiger in Delphi aneignen. Ist bestimmt auf Dauer lohnenswerter, als sich jetzt eine Alternative zu suchen.

Mithrandir 24. Nov 2009 14:46

Re: Von C nach Delphi: Benötige Hilfe
 
Zitat:

Zitat von Jazzman_Marburg
PTreeNode = ^TTreeNode;

Man stellt i.d.R. ein "P" vor die Typenbezeichnung, um zu kennzeichnen, dass es sich um einen Pointer auf die Struktur handelt. Das weiß der Compiler aber nicht. Deswegen braucht er ein "^". Das ist gleichbedeutend mit dem "*" aus C.

edit: @mleyen: Oder so. :lol:

Jazzman_Marburg 24. Nov 2009 14:55

Re: Von C nach Delphi: Benötige Hilfe
 
Ok- jetzt habe ich es auch verstanden :wall:

Aber, ich habe immer noch Probleme mit dem folgenden ( :oops: scuzi!):

Delphi-Quellcode:
/* Type declarations for base modules information */ 
typedef struct rectangle { 
float area;    /* rectangle area */ 
float height;  /* rectangle height */ 
float width;   /* rectangle width */ 
int fixed;     /* fixed orientation if == 1 */ 
treeptr ptr;   /* pointer to a tree node */ 
} base_rectangle;
Weil, so wie das obige Beispiel, läßt sich dieses ja nicht umsetzen. Was hat es mit dem abschließenden base_rectangle auf sich?

Danke nochmal
Jazzman


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz