MiesePointer schrieb:
> Ich möchte den Inhalt einer Variablen in ein anderes Modul haben, ihn
> dort Verädern und dann wieder zurück ins Modul haben. Dabei würde ich
> gern mit Pointern arbeiten.
Warum?
Man arbeitet nicht mit Pointern, wenn man nicht muss oder zumindest
einen extrem guten Grund hat.
> int* temp = VariableLesen();
> temp++;
Hier erhöhst du den Pointer und nicht das worauf er zeigt.
> Geht aber nicht, der Variableninhalt wird nicht verändert, sicher nur ne
> Kleinigkeit,
Eigentlich keine Kleinigkeit.
Denn dein ganzer Ansatz zeigt, dass du Pointer nicht verstanden hast.
Entweder: komplett ohne Pointer
1 | int Wert = 5;
|
2 |
|
3 | int get()
|
4 | {
|
5 | return Wert;
|
6 | }
|
7 |
|
8 | void set( int newVal )
|
9 | {
|
10 | Wert = newVal;
|
11 | }
|
12 |
|
13 | int main()
|
14 | {
|
15 | int i = get(); // den bisherigen Wert holen
|
16 | i++;
|
17 | set( i ); // und den veränderten Wert setzen lassen
|
18 | }
|
... und das ist die bevorzugte Variante!
oder eben, in dem das Modul einen Pointer rausrückt und so dem Aufrufer
ermöglicht direkt, ohne Umweg, sich an der Variablen zu schaffen zu
machen. Und weil das verwendende Modul sich direkt an der Variablen
(über den Pointer) zu schaffen macht, braucht man auch keine
Set-Funktion mehr. Und genau da liegt der Grund, warum man diesen Weg
eigentlich nicht machen will: Eine Set Funktion hätte immer noch die
Möglichkeit, den neu zu setzenden Wert zu überprüfen (zb auf
Sinnhaftigkeit, auf Bereichsgrenzen etc.). Durch Herausgabe des Pointers
hat sich das Modul ganz dem Aufrufer ausgeliefert, dass der keinen
Fehler macht. Der kann jeden beliebigen Wert in die Modul-Variablen
schreiben, ob die Sinn machen oder nicht.
1 | int Wert;
|
2 |
|
3 | int* get()
|
4 | {
|
5 | return &Wert;
|
6 | }
|
7 |
|
8 |
|
9 | int main()
|
10 | {
|
11 | int* ptrToVariable = get();
|
12 |
|
13 | // An dieser Stelle hat main die Adresse von 'Wert', auch wenn
|
14 | // es nicht weiß, wie die Variable heißt.
|
15 | // Jegliche Manipulation über *ptrToVariable manipuliert bereits
|
16 | // direkt die Variable "Wert"
|
17 |
|
18 | (*ptrToVariable)++;
|
19 | }
|