Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeiger auf Struct in C (https://www.delphipraxis.net/70081-zeiger-auf-struct-c.html)

faux 24. Mai 2006 17:57


Zeiger auf Struct in C
 
Hallo!

Ich bin gerade dabei, mir wieder etwas C anzusehen. Mein Bsp: Eine FIFO.
Wie kann ich auf ein Unterelement eines Zeigers auf einen Struct zugreifen?
In Delphi geht da so:
Delphi-Quellcode:
type
  PNode = ^TNode;
  TNode = record
    Value: Integer;
    Next: PNode;
  end;
var
  a: PNode;
begin
  New(a);
  a^.Value = 10;
end;
Und wie geht das in C?
Mein Versuch:
Code:
struct node
{
  int value;
  struct node *next;
};

struct node *a;
a = (struct node *) malloc(sizeof(struct node));
*a.value = 10; //Geht nicht...
Wie gehts richtig?

Danke schon mal.

Grüße
Faux

Dax 24. Mai 2006 18:08

Re: Zeiger auf Struct in C
 
Gehts denn damit?
Code:
a.*value = 10;
Hab mir vor Urzeiten mal einen Riesenwälzer C/C++ angetan, aber allzuviel hängen geblieben ist anscheinend nicht ;)

faux 24. Mai 2006 18:09

Re: Zeiger auf Struct in C
 
Zitat:

Zitat von Dax
Gehts denn damit?
Code:
a.*value = 10;

Nein, geht leider auch nicht (kann ja auch nicht, da value ja kein Zeiger ist, sondern a). :(

Grüße
Faux

Dax 24. Mai 2006 18:13

Re: Zeiger auf Struct in C
 
Dann probier mal -> aus.

faux 24. Mai 2006 18:20

Re: Zeiger auf Struct in C
 
Zitat:

Zitat von Dax
Dann probier mal -> aus.

Nein, geht leider auch nicht. IMHO benutzt man -> nur bei Klassen und bei Structs immer den Punkt.
Naja, trotzdem Danke.

Grüße
Faux

Dax 24. Mai 2006 18:24

Re: Zeiger auf Struct in C
 
Wenn du reines C benutzt gibts doch gar keine Klassen? :gruebel:

Naja, hab das mit dem -> im .NET-SDK gefunden ;)

Code:
struct BTree {
   char *szText;
   BTree *Left;
   BTree *Right;
};

void PrintTree( BTree* MybtRoot ) {
   // Traverse the left branch of the tree recursively.
   if ( btRoot->Left )
      PrintTree( btRoot->Left );

   // Print the current node.
   cout << btRoot->szText << "\n";

   // Traverse the right branch of the tree recursively.
   if ( btRoot->Right )
      PrintTree( btRoot->Right );
}

faux 24. Mai 2006 18:30

Re: Zeiger auf Struct in C
 
So funktionierts! Danke! :D
Habe immer a->*value bzw *a->value benutzt, da ich unbedingt den Stern unterbringen wollte...
Aber wieso das jetzt so ist, würde ich gerne wissen. Bewirkt -> automatisch eine Dereferenzierung?
Danke, hat sich erübrigt. Mein C Buch gab Aufschluss: Der -> Operator ist extra für soetwas da.

btw: Wieso wird in dem Code von dir in der Prozedur BTree* MybtRoot deklariert, aber im Code immer nur btRoot verwendet? :gruebel:

Grüße
Faux

Dax 24. Mai 2006 18:32

Re: Zeiger auf Struct in C
 
Puh, keine Ahnung warum das so ist... Nuja, kannst ja mal ins .NET2-SDK kucken unter "Indirection" bei C++ ist es das 7. Ergebnis^^

NicoDE 24. Mai 2006 19:13

Re: Zeiger auf Struct in C
 
Ich würde es so deklarieren:
Code:
typedef struct tagTNode {
  int              value;
  struct tagTNode * next;
} TNode, * PNode;

{ ... }
    PNode a;
    a = (PNode)malloc(sizeof(TNode));
    a->value = 10;

faux 24. Mai 2006 19:35

Re: Zeiger auf Struct in C
 
Zitat:

Zitat von NicoDE
Ich würde es so deklarieren...

Danke, man lernt nie aus. ;)
Nur glaube ich nicht, dass man in C P<Name> und T<Name> verwender; das sieht mir eher nach Delphi-Style aus.

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Seite 1 von 2  1 2      

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