C/C++ Zeiger auf Struckt

MPNuts

Mitglied
Hi,
mal wieder eine Frage, ich habe diese drei Structs,
Code:
struct umlaut
{
char o;
char a;
char u;
};
struct zarray
{
char * p;
int globalindex;
};
struct qarray
{
char * ar1;
char * ar2;
int a1;
int a2;
};
struct umlaut uml;
struct zarray ary;
struct qarray qary;
nun würde ich gerne einen Pointer auf jedes dieser Arrays legen, diese drei Pointer sollen dann auch wieder in einen Struct. Soweit bekomme ich das noch hin,
Code:
struct pointer
{
char * pqarray;
char * pzarray;
char * pumlaut;
};
void main ()
struct zarray ar1;
pzarray=ar1;
struct pointer pr;

Nun ist die Frage, wie komme ich in einer beliebigen Funktion die den pr Pointer erhalten hat, wieder auf die einzelnen Elemente?
Soll ich lieber Arrays in die Structs bauen, und diese dann anhand der Indzes abfragen.
 
Warum machst du denn die Pointer in dem Pointer-Struct nicht vom struct-typ, sondern char*?
Dann musst du ja jedesmal casten, wenn du darauf zugreifen willst.

struct pointer
{
qarray* pqarray;
zarray* pzarray;
umlaut* pumlaut;
};

Wenn's denn gar C ist, dann muss da ein struct qarray* rein (glaube ich mich zu erinnern).
 
Endurion hat gesagt.:
Warum machst du denn die Pointer in dem Pointer-Struct nicht vom struct-typ, sondern char*?
Dann musst du ja jedesmal casten, wenn du darauf zugreifen willst.
Naja, man könnte sagen, weil ich es nicht besser wusste! Ich arbeite das erste mal mit Structs, und ich mach das alla "lerning by doing", und kram mir Infos aus dem Forum!

Endurion hat gesagt.:
Wenn's denn gar C ist, dann muss da ein struct qarray* rein (glaube ich mich zu erinnern).
Sollte C sein, aber da mein Programm mittlerweile voll von C++ Syntax ist, habe ich diesen nobelen Traum, ein reines ANSII-C Programm zu schreiben, aufgegeben!

Naja, jetzt ist mir auch mal wieder eingefallen, dass ein Struct ja nicht anderes als ein Datentyp ist!
Vielen Dank für die schnelle Hilfe, jetzt kann ich meine ganzen globalen structs wieder löschen, und durch Pointer ersetzen.
 
Code:
struct qarray 
{
char * ar1;
char * ar2;
int a1;
int a2;
};
struct pointer
{
qarray* pqarray;
zarray* pzarray;
umlaut* pumlaut;
};
struct pointer funktion (struct pointer pr);
 
void main ()
{
struct pointer pr;
struct qarray qary;
pr.pqarray=&qary;
 
qary.a1=15;
pr=funktion(pr);
printf("%d",qary.a1);
getch();
}
 
struct pointer funktion (struct pointer pr)
{
 
&qary.a1=irgendwas 
//Wie komme ich nach so einer Übergabe wieder an a1aus dem struct qarray ran, 
 
printf("%d",qary.a1);
getch();
qary.a1-=2;
return pr;
}

Also, so sollte die Übergabe laufen, aber ich komme leider nicht wieder an die Elemete der einzelnen (in diesem Bsp dem Struct) Structs ran, wie mache ich das?
Wäre toll, wenn mir das jemand beschreiben könnte!
 
Beispiel:

PHP:
struct obj{
int Element;
};

obj Objekt;
obj* pObjekt = &Objekt;


Objekt.Element; // Zugriff auf ein Element von einem Objekt
*pObjekt; //Dereferenzieren eines Zeigers (also eine Referenz auf das Objekt erhalten, auf das der Zeiger zeigt)
(*pObjekt).Element; //Zugreifen auf ein Element eines Objekts über einen Zeiger
pObjekt->Element; //Verkürzte Schreibweise dafür

Alles klar?
 
Zuletzt bearbeitet:
Ja, es klappt!
Ich muss allerdings sowas machen: (*(*pObjekt)Objekt).Element
Gibt es dafür auch eine kürzere Schreibweise?
Wie ist das eigentlich, wenn ich jetzt einer Funktion den Pointer übergebe, werden die Werte dann generell geändert, oder nur in der Funktion?
Da es ja ein Pointer ist, müssten die Änderungen überall sein, oder?
 
Code:
(*(*pObjekt)Objekt).Element
Sowas sollte eigentlich nach meinem Verständnis von C++ überhaupt nicht klappen....
Was soll es denn genau bezwecken. Bring mal ein Beispiel mit jedem beteiligten struct und seiner Definition und den davon erstellten Objekten.

Bei deinem vorigen Beispiel:
Code:
void funktion(pointer pr){
 pr.pqarray->ar1; // so kannst du zugreifen...
}


MPNuts hat gesagt.:
Wie ist das eigentlich, wenn ich jetzt einer Funktion den Pointer übergebe, werden die Werte dann generell geändert, oder nur in der Funktion?
Da es ja ein Pointer ist, müssten die Änderungen überall sein, oder?
Seit wann werden Zeiger bei einem Funktionsaufruf geändert? Alle Werte kommen genau so in der Funktion an, wie du sie übergibst.
Oder meinst du was anderes, erklär dich bitte.

Mfg
 
Sowas sollte eigentlich nach meinem Verständnis von C++ überhaupt nicht klappen....
Was soll es denn genau bezwecken. Bring mal ein Beispiel mit jedem beteiligten struct und seiner Definition und den davon erstellten Objekten.
Naja, klappen tuts, macht genau das selbe was man auch mit pr.pqarray->ar1 macht. Naja, letztere Schreibweise ist durchsichtiger (ein Punkt für die andere Schreibweise, da es ein Programm für meinen Prof wird!) und natürlich viel bequemer zu schreiben! (Darum wird mein Prof wohl verschont bleiben!)

Seit wann werden Zeiger bei einem Funktionsaufruf geändert? Alle Werte kommen genau so in der Funktion an, wie du sie übergibst.
Oder meinst du was anderes, erklär dich bitte.
Ich meinte damit mehr, wenn ich die übergebenen Werte dann überschreibe, werden sie auch in der rufenden Funktion überschrieben?
Aber eigentlich schon, da es ja lediglich Zeiger auf Speicheradressen sind und die Speicheradresse kann ja keine verschiedene Zustände aufeinmal haben!
Wenn ich micht täusche, wäre nett, wenn mir einer auf die Füße tritt!
 
Zurück