Ein paar Fragen zu Zeigern
-
Hallo,
ich benutze momentan dieses Tutorial:
http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index&req=viewdownloaddetails&lid=44Und hab einige Fragen zu Zeigern, da ich sie dort(Im Kapitel über Zeiger) nicht finden konnte.
Wo liegt z.B. der Unterschied bei diesen Zeigern?char* Var="HALLO"; char * Var="HALLO"; // Ich meine damit nicht den Multiplikations-Operator char *Var="Hallo";
Desweitern hab ich noch eine Frage: Was passiert beim Inkrementieren- bzw. Dekrementieren von Zeigern(z.B. strcmp())?
Danke
-
leerzeichen darfst du setzen soviele du willst. diese 3 varianten sind identisch.
du darfst auch
char * Var = "HALLO" ;
schreiben wenn du lustig bist.
-
es ist egal ob du
char *x;
oder
char* x;
schreibst. Es wird jedesmal eine Zeigervariable deklariert.
Wenn du inkrement oder dekrement auf Zeiger anwendest wird die Adresse aud die der Zeiger zeigt um die Größe des Datentyps von dem der Zeiger ist erhöht oder verringert. Z.b. ist dein Zeiger von Typ char (1 byte) und er zeigt auf die Adresse 0x30000 dann zeigt er nach inkrement auf 0x30001.
-
da gibts kein Unterschied!
man sollte aber bei der schreibweise aufpassen da bei:
char* a,b;
b kein zeiger ist!
char *a,*b;
es ist übersichtlicher das * direkt vor dem Variablennamen anzugeben!
inkrementieren = ++ Bsp.: ++i bedeutet i + 1
dekrementieren= -- Bsp.: --i bedeutet i - 1bei zeigern bedeutet das, den Zeiger auf die nächste oder vorherige adresse zeigen zu lassen!
mfg hohesC
-
--Gast++ schrieb:
Desweitern hab ich noch eine Frage: Was passiert beim Inkrementieren- bzw. Dekrementieren von Zeigern(z.B. strcmp())?
was strcmp damit zu tun hat weiss ich nicht.
inkrement und dekrement auf einen zeiger lassen ihn auf die nächste speicherzelle zeigen.
bei einem int* wird der zeiber bei einem ++p; um sizeof(int) bytes im speicher verschoben, so dass wenn 2 integers hintereinander im speicher liegen der zeiger nun auf den 2. int zeigt.
-
zu deiner ersten Frage:
Meiner Meinung nach gibt es hier keinen Unterschied ausser der Gewohnheit, wie man selbst Zeiger deklariert.zu deiner zweiten Frage:
(*Var)++; //erhöht den Inhalt, worauf Var zeigt Var++; //erniedrigt die Adresse um sizeof(Var) Bytes, da der Stack von hohen hin zu niedrigen Adressen wächst
-
curry-king schrieb:
Var++; //erniedrigt die Adresse um sizeof(Var) Bytes, da der Stack von hohen hin zu niedrigen Adressen wächst
Nope. Richtig ist das, was Shade bereits schrieb.
Zeigerarithmetik hat nichts mit Stack Verhalten zu tun.
-
Danke für die Antworten!
@Shade
Bei strcmp(http://www.strcmp.de/,http://www.strcmp.de/) werden doch zwei Zeiger Inkrementiert um zwei Strings zu Vergleichen?!
-
--Gast++ schrieb:
Bei strcmp(http://www.strcmp.de/,http://www.strcmp.de/) werden doch zwei Zeiger Inkrementiert um zwei Strings zu Vergleichen?!
Strings werden ja durch char-Pointer dargestellt. Inkrementiert man den char-Pointer um 1, so zeigt er auf das zweite Zeichen, aus einem "Hallo" würde ein "allo" werden. Auf der Seite ist eine Implementierung von strcmp dargestellt. Die Inkrementierung der char-Pointer entspricht in dem Fall einem zeichenweisen Durchlaufen der einzelnen Buchstaben der Strings. Denn damit zwei Strings identisch sind, müssen ja alle Buchstaben identisch sein.
PS: Ich finde es übrigens schick, dass strcmp jetzt schon seine eigene Internetseite hat
-
masterofx32 schrieb:
--Gast++ schrieb:
Bei strcmp(http://www.strcmp.de/,http://www.strcmp.de/) werden doch zwei Zeiger Inkrementiert um zwei Strings zu Vergleichen?!
Strings werden ja durch char-Pointer dargestellt. Inkrementiert man den char-Pointer um 1, so zeigt er auf das zweite Zeichen, aus einem "Hallo" würde ein "allo" werden. Auf der Seite ist eine Implementierung von strcmp dargestellt. Die Inkrementierung der char-Pointer entspricht in dem Fall einem zeichenweisen Durchlaufen der einzelnen Buchstaben der Strings. Denn damit zwei Strings identisch sind, müssen ja alle Buchstaben identisch sein.
PS: Ich finde es übrigens schick, dass strcmp jetzt schon seine eigene Internetseite hat
Dito, so meinte ich das
-
--Gast++ schrieb:
Bei strcmp(http://www.strcmp.de/,http://www.strcmp.de/) werden doch zwei Zeiger Inkrementiert um zwei Strings zu Vergleichen?!
jo. man kann strcmp auch mit laufenden zeigern implementieren, muss man aber nicht