Wie funktionieren denn Pointer bei avr-gcc ? Tut das so ? void zwei(int *p) { p++; } void eins(void) { int i; zwei(i); } Ist nur ein simples Beispiel. Ich möchte, dass Änderungen in der Funktion zwei auch Auswirkungen auf die Variable in eins haben. Die Variante mit Rückgabe bringt mir nichts. Danke. mfg Dennis
@ Dennis (Gast) >Wie funktionieren denn Pointer bei avr-gcc ? So wie überall auf C-Compilern. >void zwei(int *p) { > p++; >} Klar. Aber das macht nicht was du denkst. Das erhöht den Pointer, nicht den variableninhalt. Das macht man so, Stichwort Dereferenzierung. *p++; >void eins(void) { > int i; > zwei(i); Hier meckert der Compiler, weil du eine Variable übergibst, und keinen Pointer. Eher so zwei(&i); >Funktion zwei auch Auswirkungen auf die Variable in eins haben. Die Nennt sich Call by reference. MFG Falk
Ah okay, dann also so: void eins(int *p) { *p++; } void hop(void) { int i; zwei(&i); } Und wie macht man das ganze mit einem Struct ? typedef struct { int a; int b; } test_t; void eins(test_t *p) { *p.a++; } void hop(void) { test_t i; zwei(&i); } Danke. mfg Dennis
@ Dennis (Gast) >Und wie macht man das ganze mit einem Struct ? >void eins(test_t *p) { > *p.a++; Mit sowas sollte man seeehr vorsichtig sein, du wärst ganz sicher nicht der Erste, der sich damit in Knie schiesst. Die Reihenfolge der Operatoren ist in C manchmal sehr kryptisch definiert, also besser Klammern setzen. Es geht auch. p->a++; (*p.a)++ Ohne Gewähr! MFG Falk
> (*p.a)++
Also ich würde sagen das muss so aussehen:
(*p).a++
"." hat eine höhere Wertigkeit als "*".
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.