avr-gcc Wie funktionieren pointer ?

Gast #1031843
Lesenswert?

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
#1031852
Lesenswert?

@  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
Gast #1031873
Lesenswert?

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
#1031888
Lesenswert?

@ 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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren