Frage zu Zeiger
-
hallo,
ich hab hier einen code aus dem netz und da wollte ich mal ein paar fragen zu stellen
#include <iostream> using namespace std; void print(char* p) { while(*p) //kurform von *p!=0 oder *p!='\0' { cout<<*p; ++p; } } int main() { print("Hello World\n"); }so wenn man das so macht dann zeigt er normal "hello world" an aber nun eine geänderte version von mir, weil ich was probieren wollte
#include <iostream> using namespace std; void print(char* p) { while(*p) //kurform von *p!=0 oder *p!='\0' { cout<<p;//hier habe ich den zeigerstatus weggenommen ++p; } } int main() { print("Hello World\n"); }so nun die frage, warum wird bei dem 2.code das hello world so komisch ausgegeben?? das versteh ich net... kann vielei einer ma den sinn von dem zeiger an dieser stelle erklären is mir net so ganz klar,
danke shconmal
-
mit "*p" dereferenzierst du den Zeiger, er gibt das Zeichen an der aktuellen Stelle aus
wenn du nur "p" ausgibst, gibst du die Adresse aus, auf die der Zeiger zeigt ...
-
eigentlich sollte der bei der zweiten variante mehrmals hello world ausgeben und jedesmal vorne nen buchstaben abschneiden.
wenn man "nur p" ausgibt erscheint halt der cstring in der ausgabe. so ist cout für cstrings definiert. und er interpriert jeden pointer auf ein array von char als cstring. zumindest wird das versucht.
-
aber warum wird dann das wort von hinten nach vorne immer kleiner werdend aus?? und du sagst ja das er die adresse ausgibt, also warum zeigt er mir nicht die adresse an? also für mich is eine adresse ne zahl?? oder verstehe ich da jetzt was falsch
hab das mit den zeigern noch nie so richtig geschnalltP.S. ja genau mir wird das word mehrmals ausgegeben mit jeweils einem abgeschnittenen buchstaben aber warum??? das zeigersystem is mir zu hoch
-
er gibt keine zahl (adresse) aus, weil das durch den code nicht gegeben ist. deine abgeänderte variante ist gültiges c++, macht aber vielleicht nur nicht das, was du erwartest.
char *p = "Hello world!"; // p zeigt auf 'H', das erste element cout << p << endl; // gibt 'Hello world!' aus ++p; // p zeigt jetzt auf 'e', das zweite element cout << p << endl; // gibt 'ello world!' aus
-
ok... und warum wird dann einfach das 'H' vershcluckt oder weggelassen, und jetzt wollt ich ma wissen warum man dann immer sagt es zeig auf die adresse und was ich davon habe wenn ein zeiger auf die adresse von zum beispiel einer int variable zeigt???
-
thordk schrieb:
er gibt keine zahl (adresse) aus, weil das durch den code nicht gegeben ist. deine abgeänderte variante ist gültiges c++, macht aber vielleicht nur nicht das, was du erwartest.
char *p = "Hello world!"; // p zeigt auf 'H', das erste element cout << p << endl; // gibt 'Hello world!' aus ++p; // p zeigt jetzt auf 'e', das zweite element cout << p << endl; // gibt 'ello world!' auswarum benutzen hier eigentlich soviele ++x und nicht x++?
-
pixartist schrieb:
warum benutzen hier eigentlich soviele ++x und nicht x++?
weil x++ den wert kopiert und zurückgibt und erst dann inkrementiert. ++x inkrementiert sofort. werden aktuelle compiler bei primitiven typen aber eh "wegoptimieren".
int x = 3; int y = x++; // y == 3, x == 4 ... int x = 3; int y = ++x; // y == 4, x == 4
-
jetzt versteh ich immernoch net die sinnvolle anwendung von zeigern, kann das vielei jemand ma idiotensicher erklären??
-
wenn du zeiger brauchst, wirst du es schon merken ^^ zeiger mit cstrings zu lernen ist vielleicht der falsche ansatz, weil da zwei konzepte vermischt werden. spiel mal mit int arrays rum, da sind die ergebnisse anders.
int *i = new int[10]; // int array mit 10 einträgen 0-9, noch ungefüllt (also blödsinn drin)