002
27.07.2003, 21:44 Uhr
Pablo
Supertux (Operator)
|
Wenn du const int i = 3; hast, heißt es, dass du eine Variable von Typ int deklarierst, die Konstant sein soll, d.h, du kannst sie nicht mehr verändern während der Laufzeit. i = 8; lässt sich nicht kompilieren.
Ein Zeiger ist eine Variable, die eine Adresse vom SRAM speichert, nämlich die Adresse der Variable, auf die der Zeiger zeigt. Im ersten Fall ist sagt *, dass ip ein Zeiger sein soll, const, damit es ein konstanter Zeiger auf eine Konstante ist und &i sagt, dass ip die Adresse vom SRAM der Varivale i zurückgeben muss.
Code: |
const int i = 3; const int* ip = &i; //Zeiger auf const int
*ip = 4; // Fehler: i ist konstant ip = 0; // Ok: ip ist nicht konstant
|
Wenn du nur ip schreibst, dann heißt es, dass sie Adresse geändert werden muss. Mit *ip heißt es, dass man auf die Variable zugreifen will, auf die ip zeigt. Deshlab ist die erste Zeile nicht zulässig, denn i ist konstant. ip=0 sagt, dass die Adresse, auf die ip zeigen muss, 0 ist, d.h. dass ip auf keine andere Variable zeigt und das ist zulässig, da ip selbst keine Konstante ist.
Code: |
int i = 3; int* const ip = &i; // const-Zeiger auf int
*ip = 4; // Ok: i ist nicht konstant ip = 0; // Fehler: ip ist nicht konstant
|
i ist keine Konstante mehr, deshalb kannst du über den Zeiger ip die Variable i ändern. Aber du kannst nicht die Adresse ändern, auf die ip zeigt, weil ip als Variable konstant ist.
Ich hoff, dir ist klar geworden. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 27.07.2003 um 21:46 Uhr von Pablo Yanez Trujillo editiert. |