funktion_1( &variable++); Wie geht das?

Gast #2144900
Lesenswert?
• ▲
▼
Hallo!

Ich habe eine Funktion, an die ich die Adresse einer Variablen übergebe 
um sie in dieser zu bearbeiten.

Kann ich in einem Schritt irgendwie den Wert der Variablen beim 
Übergeben verändern?
1
void funktion_1( *variable )
2
{
3
  *variable -= 1;
4
}
5

6

7
// Aufruf:
8

9
funktion_1( &variable++ );

Auch mit Klammern geht es nicht. Geht es überhaupt, wenn ja, wie?
Gast #2144906
Lesenswert?
• ▲
▼
Wie soll es denn funktionieren ?

Soll variable erst erhöht werden und dann der funktion übergeben werden 
?
Oder soll nach der Abarbeitung von der Funktion die Variable erhöht 
werden ?

Ich glaube im Moment, dass dieses Konstrukt der falsche Ansatz sein 
könnte ...
Persönliche Seite #2144907
Lesenswert?
• ▲
▼
x++ ist der post-increment-Operator.

Wenn Du die Variable verändern möchtest, und das Resultat der Änderung 
dem Funktionsaufruf übergeben willst, musst Du den 
pre-increment-Operator ++x verwenden.

Bedenke obendrein, daß &variable++ nicht unbedingt das tut, was Du 
erwartest, hier solltest Du mit Klammern sicherstellen, daß das 
geschieht, was Du willst.

Konkret: Möchtest Du die Adresse von variable übergeben und variable 
inkrementieren, oder möchtest Du die Adresse inkrementieren?

In ersterem Falle:

funktion_1(&(++variable));

in letzterem Falle:

funktion_1(++(&variable));
Gast #2144965
Lesenswert?
• ▲
▼
Hier nochmal eine funktionierende Version. ( mit increment_by kannst du 
sogar um einen bestimmten Wert erhöhen ).
1
uint8_t *increment(uint8_t *var)
2
{
3
    (*var)++;
4
    return var;
5
}
6

7
uint8_t *increment_by(uint8_t *var, uint8_t by)
8
{
9
    (*var) += by;
10
    return var;
11
}

Aufruf über
1
buttons_change_repeat( increment(&repeat_counter) );
#2145173
Lesenswert?
• ▲
▼
Frank schrieb:
> Hat denn trotzdem einer eine Erklärung, warum das nicht geht mit
>
1
> funktion( &(++variable) );
2
>

Mit & kannst du nur die Adresse eines Objekts im Speicher (Variable) 
beglücken.

++variable ist aber nicht die Variable, sondern ein Ausdruck. Der 
liefert zwar einen Wert als Ergebnis, ist aber selbst keine Variable.

Ebensowenig könnte man von (i+j) die Adresse bilden.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.