Frage nach "struct"

pepsi_gx

Erfahrenes Mitglied
Hallo Forum,

mir ist es klar, daß es zwei Methoden gibt, auf die Elemente von einer "struct" zuzugreifen. z.B.:

strukturname.komponentname
oder
zeiger_auf_eine_struktur->komponentname


Interessant ist, welcher Unterschied besteht dazwischen bzw. welche Vorteile haben sie gegeneinander(Zugriff von der Struktur selbst oder über einen Zeiger)?

Noch darüber hinausgehend, wenn ich eine Funktion schreibe, die einen Wert vom Typ "struct" zurückgeben soll, dann:

C++:
struct FuncName(...)
{
//Hier füllt sie die Elemente ein
};


oder besser

C++:
struct* FuncName(...);
{
//Hier füllt sie die Elemente ein
};
:confused:

(Ich weiss schon, daß die erste die ganze Struktur zurückgibt mit darin eingefüllten Elementen, während die zweite nur einen Zeiger auf so ne Struktur zurückgibt. Unklar ist, unter welcher Bedingung welche zu benutzen)

*LG*
 
Hi.
mir ist es klar, daß es zwei Methoden gibt, auf die Elemente von einer "struct" zuzugreifen.
Nein, gibt es nicht.
z.B.:

strukturname.komponentname
oder
zeiger_auf_eine_struktur->komponentname
Was nur syntaktischer Zucker ist für
C:
(*zeiger_auf_eine_struktur).komponentname
Interessant ist, welcher Unterschied besteht dazwischen bzw. welche Vorteile haben sie gegeneinander(Zugriff von der Struktur selbst oder über einen Zeiger)?
Der Zeiger muss erst dereferenziert werden.
Noch darüber hinausgehend, wenn ich eine Funktion schreibe, die einen Wert vom Typ "struct" zurückgeben soll, dann:

C++:
struct FuncName(...)
{
//Hier füllt sie die Elemente ein
};


oder besser

C++:
struct* FuncName(...);
{
//Hier füllt sie die Elemente ein
};
:confused:

(Ich weiss schon, daß die erste die ganze Struktur zurückgibt mit darin eingefüllten Elementen, während die zweite nur einen Zeiger auf so ne Struktur zurückgibt. Unklar ist, unter welcher Bedingung welche zu benutzen)
Im ersten Fall wird die Struktur über den Stack übergeben, was bei größeren Strukturen zu Problemen führen kann, da der Stack in der Regel nicht sehr groß ist.

Wenn ein Zeiger zurückgegeben wird, muss die Struktur innerhalb der Funktion Speicher für die Struktur allozieren, wobei in das Problem auftaucht wie dann der Speicher wieder freigegeben werden soll (mit free, delete oder delete[] oder gar ganz anders?).

Gruß
 
Zurück