Wert im Pointer inkrementieren bzw. dekrementieren - gelöst
-
Hallo liebe Gemeinde.
Ich habe in insgesamt vier Büchern nachgeschlagen und habe auch Google gefragt, bloß bin ich auf keine Antwort gestoßen, die mir hilft.
Ich will den Wert, auf den ein Pointer zeigt, inkrementieren bzw. dekrementieren.
Dazu folgender Programmcode:
#include <iostream> using namespace std; int main() { double x; double *px=0; px = &x; cout << "Geben Sie eine Zahl ein!\n"; cin >> x; cout << "Das haben Sie eingegeben: " << x << "\n"; cout << "Zeiger auf die Variable: " << *px << "\n"; *px++; cout << "Zeiger auf die Variable inkrementiert: " << *px << "\n"; *px--; cout << "Zeiger auf die Variable dekrementiert: " << *px << "\n"; return 0; }
Welchen Denkfehler habe ich? Kann man überhaupt das überhaupt so machen?
Danke für die Antworten im Voraus.
Gruß
Max
-
Hallo
(*px)++;
-
Denk an die Operatorpräzedenz. Du musst folgendes schreiben:
(*px)++; cout << "Zeiger auf die Variable inkrementiert: " << *px << "\n"; (*px)--;
LG, freakC++
-
Gibt das keine Warnung, dass das Dereferenzierungsstatement keinen Effekt hat?
-
Jockelx schrieb:
Hallo
(*px)++;
Danke für den Tipp, hat geklappt.
Nein, es gab keine Warnung. Es kam in der Ausgabe nur ein komischer Wert raus.
Gruß
Max
-
ganz einfache regeln zum merken:
postfix-operatoren binden immer stärker als präfix-operatoren.
präfix/postfix-operatoren binden immer stärker als binäre operatoren.Alternative Lösung:
++*px;
-
silent_max schrieb:
Nein, es gab keine Warnung. Es kam in der Ausgabe nur ein komischer Wert raus.
Dann konfigurier Deine IDE mal so, dass es Warnungen gibt...
Z.B. beim gcc:FurbleWurble@sinsemilla /tmp $ g++ test.cc -Wall -pedantic test.cc: In function ‘int main()’: test.cc:15:8: warning: value computed is not used test.cc:19:8: warning: value computed is not used
-
Ich habe inzwischen folgendes Programm geschrieben:
#include<iostream> using namespace std; int main() { float i; float *ip = &i; //Deklaration eines Pointers auf die Adresse von i float *ip_2 = &i; //Delaration eines zweiten Pointers auf die Adresse von i cout << "Geben Sie eine Zahl ein!\n"; cin >> i; cout << "Diese Zahl haben Sie eingegeben: " << i << "\n"; //Ausgabe des eingegebenen Wert fuer die Variable i cout << "Wert von *pi: " << *pi << "\n"; //Ausgabe des ersten Pointers auf die Variable i cout << "Wert von *pi_2: " << *pi_2 << "\n"; //Ausgabe des zweiten Pointers auf die Variable i cout << "\n"; (++*pi); //Wert in der Adresse von i wird um 1 inkrementiert cout << "Zahl fuer i inkrementieren: " << *pi << "\n"; //inkrementierter Wert wird ausgegeben (--*pi); //Wert in der Adresse von i wird um 1 dekrementiert cout << "Zahl fuer i dekrementieren: " << *pi_2 << "\n"; //dekremntiert Wert wird ausgegeben return 0; }
Wenn ich jetzt beispielsweise für i den Wert 5 eingebe, wird in der Ausgabe folgendes angezeigt:
Geben Sie eine Zahl ein! 5 Diese Zahl haben Sie eingegeben: 5 Wert von *pi: 5 Wert von *pi_2: 5 Zahl fuer i inkrementiert: 6 Zahl fuer i dekrementiert: 5
Eigentlich wollte ich für die Zeile "Zahl fuer i dekrementier: 4" ausgeben lassen. Deswegen habe ich ja auch (--*pi_2) geschrieben.
Warum wird aber dann "Zahl fuer i dekrementiert: 5" ausgegeben? Welchen Denkfehler habe ich?
Vielen Dank für die Antworten im Voraus.
Gruß
Max
-
5
5+1=6
6-1=5edit: Weiszt du eigentlich, was ein Pointer ist? Du aenderst hier ja nichts an deinen Pointern, sondern am Wert des ints auf das die beiden Pointer zeigen.
Bitte sieh dir mal das hier an: https://www.youtube.com/watch?v=i49_SNt4yfk
-
Was ist denn ein "pointee"???
-
Das worauf der Zeiger zeigt.
Pointer -> Pointee.Anderes Beispiel aus dem Englischunterricht :xmas1: :
Employer -> Employeeetc
-
silent_max schrieb:
Was ist denn ein "pointee"???
Komm, zu faul zum googlen kannst du nicht sein.
Edit: Ethon, wieso..Noch ein Fall: Caller -> Callee
Edit: Oh! Auf Google kommt tatsächlich nicht viel dazu. Na, die Erklärungen hast du ja
-
silent_max schrieb:
Was ist denn ein "pointee"???
Das Objekt, auf das der Pointer zeigt = Pointee
-
Sone schrieb:
silent_max schrieb:
Was ist denn ein "pointee"???
Komm, zu faul zum googlen kannst du nicht sein.
Edit: Ethon, wieso..Noch ein Fall: Caller -> Callee
Wobei ich es lustig finde, dass es das Wort im Englischen gar nicht gibt.
-
out schrieb:
Sone schrieb:
silent_max schrieb:
Was ist denn ein "pointee"???
Komm, zu faul zum googlen kannst du nicht sein.
Edit: Ethon, wieso..Noch ein Fall: Caller -> Callee
Wobei ich es lustig finde, dass es das Wort im Englischen gar nicht gibt.
Tatsächlich. Ich dachte, das findet man in jedem Online-Wörterbuch...
-
Sone schrieb:
silent_max schrieb:
Was ist denn ein "pointee"???
Komm, zu faul zum googlen kannst du nicht sein.
Edit: Ethon, wieso..Zumindest kennt dict.cc das Wort "pointee" nicht
-
Sone schrieb:
out schrieb:
Sone schrieb:
silent_max schrieb:
Was ist denn ein "pointee"???
Komm, zu faul zum googlen kannst du nicht sein.
Edit: Ethon, wieso..Noch ein Fall: Caller -> Callee
Wobei ich es lustig finde, dass es das Wort im Englischen gar nicht gibt.
Tatsächlich. Ich dachte, das findet man in jedem Online-Wörterbuch...
Nope, kannst ja mal deine Online-Wörterbücher nach pointee durchsuchen. :p Allerdings finde ich auch logisch, dass es das Wort nicht gibt. Wie willst du es z.B. in einem Wort übersetzen?
-
Wenn ich jetzt die Zeile
i = new float;
kommt bei mir die Meldung
Error: Wein Wert vom Typ ""float"" kann keiner Entität vom Typ ""float"" zugewiesen werden.
-
Weil i kein float* (Zeiger auf float), sondern ein float ist.
-
Schau mal welchen Typ der Operator new zurückgibt. Und dann schau, welchen Typ i hat. http://www.cplusplus.com/reference/new/operator new/
Hmm, wusste gar nicht, dass man für new <new> inkludieren muss.