avr-gcc Wie funktionieren pointer ?

Gast #1031843
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.