Pointer
-
Edit: Hier stand Mist...
-
char *string char* string
dazwischen gibts keinen unterschied, die stellung des* ist egal, solange es zwischen dem typen und dem bezeichner steht
-
sbrog schrieb:
wenn du schreibst char* string,var; dann ist var ebenfalls ein pointer.
Nein. var ist trozdem kein pointer!
-
Gast77: DIe mit 2 Sternen sind Pointer auf Pointer.
Folgendes ist äquivalent
char* a;
char * a;
char *a;Es ist also Geschmackssache wo du den Stern hinpackst. Ich bevorzuge die 1. Variante. Auch weit verbreitet ist Variante 3. Die 2. sieht man eher selten.
-
sbrog schrieb:
wenn du schreibst char* string,var; dann ist var ebenfalls ein pointer. Wenn du schreibst char *string,var; dann ist nur string ein pointer und var ein normaler char. Zwei Sterne stellen einen Zeiger auf einen Zeiger dar.
Wenn ich mich richtig erinnere ist genau diese (falsche) Aussage ein Pro Argument für char *var;, da man hier sofort sieht das nur ein Pointer deklariert wird.
-
Konrad schrieb:
sbrog schrieb:
wenn du schreibst char* string,var; dann ist var ebenfalls ein pointer. Wenn du schreibst char *string,var; dann ist nur string ein pointer und var ein normaler char. Zwei Sterne stellen einen Zeiger auf einen Zeiger dar.
Wenn ich mich richtig erinnere ist genau diese (falsche) Aussage ein Pro Argument für char *var;
Ne, es ist einfach ein Zeichen von Fehlinformation. Variablendeklarationen mit Zeigertypen sind imo ein Spezialfall. Was sagst du zB dazu
typedef int* foo; foo a, b;
? Beide Variablen sind Zeiger.
-
Das suckt aber dann auch wieder. Das führt wieder LPDIRECTDRAWSURFACE7.
Die C++ Syntax ist in diesem Fall IMHO einfach Schrott. Ich bin vor einiger Zeit dazu übergegangen, für jede Deklaration eines Pointers eine eigene Zeile zu verwenden.
-
Hey, vielen Dank für die Antworten! Das Zeiger ja wirklich wichtig zu sein scheinen, muss ich mich schließlich auch gut damit befassen. Also, finde ich super, dass gleich soviele geholfen haben!! Danke!!!
Werde dann mal C++ weiterstudieren
-
Optimizer schrieb:
Das suckt aber dann auch wieder. Das führt wieder LPDIRECTDRAWSURFACE7.
Die C++ Syntax ist in diesem Fall IMHO einfach Schrott.Imo ist C/C++ an dieser Stelle einfach misdesigned. Stell dir mal folgendes vor, jemand ist so dumm und definiert in irgendeiner Header einer API folgenden "Typ"
#define mein_toller_typ int*
Jemand der die API benutzt schreibt nun folgendes
mein_toller_typ a, b;
Würdest du hier nicht erwarten, dass ich 2 Zeiger auf int habe. Also ich schon.
Optimizer schrieb:
Ich bin vor einiger Zeit dazu übergegangen, für jede Deklaration eines Pointers eine eigene Zeile zu verwenden.
Mach ich mittlerweile auch so, und da ich eh wenig rohe Zeiger benutze ist das verkraftbar.
-
Würdest du hier nicht erwarten, dass ich 2 Zeiger auf int habe. Also ich schon.
Ja, ich auch. Meine Kritik an die Syntax bezieht sich auf das
Foo* a, b;
Nur wegen der etwas seltsamen Wirkung dieser Definition gibt es so viele hässliche typedefs wie mein obiges Beispiel.
-
groovemaster schrieb:
Stell dir mal folgendes vor, jemand ist so dumm und definiert in irgendeiner Header einer API folgenden "Typ"
#define mein_toller_typ int*
Weil jemand dumm ist, ist die Sprache "misdesigned"? Versteh ich irgendwie nicht, ist ein Messer schlecht weil ungeschickte Menschen sich damit in die Finger schneiden? (BTW ich hab solchen Code tatsächlich schon gesehen, von einem Informatikdiplomanden *schauder* aber ich mach nicht die Sprache dafür verantwortlich)
Optimizer schrieb:
Nur wegen der etwas seltsamen Wirkung dieser Definition gibt es so viele hässliche typedefs wie mein obiges Beispiel.
IMHO gibt es solche Typedefs, weil man in Pascal mit unbenannten Typen in Schwierigkeiten kommt und daher grundsätzlich für Pointer-, Recordtypen usw. benannte Typen vereinbart. Windows kommt IMO historisch aus der Pascal-Ecke, und die Tradition hat sich gehalten. Im Unix-Kosmos würde mir jetzt kein Beispiel einfallen, in dem ein typedef auf einen Pointer benutzt wird, die schreiben dort alle brav ihre Sternchen.
BTW wenn man die Syntax so definiert hätte, dass int* a,b; 2 Zeiger deklariert, würde das einige interessante Konsequenzen nach sich ziehen:
int[10] array; // wie in Java void(int x) funktion; // hmm... void(*)() funktionszeiger; ...
Gibts denn ne wirklich andere, besser Lösung? Vielleicht doch wieder an Pascal angelehnt:
a,b: pointer to int; ?
-
Bashar schrieb:
groovemaster schrieb:
Stell dir mal folgendes vor, jemand ist so dumm und definiert in irgendeiner Header einer API folgenden "Typ"
#define mein_toller_typ int*
Weil jemand dumm ist, ist die Sprache "misdesigned"? Versteh ich irgendwie nicht
Ich auch nicht. Soll ich das gesagt haben? Kann mich nicht daran erinnern. Da hast du wohl was falsch verstanden.
Bashar schrieb:
BTW wenn man die Syntax so definiert hätte, dass int* a,b; 2 Zeiger deklariert, würde das einige interessante Konsequenzen nach sich ziehen:
int[10] array; // wie in Java // damit koennte ich leben --groovemaster void(int x) funktion; // hmm... // siehe oben (sofern du damit keine Funktionsdeklaration meinst) --groovemaster void(*)() funktionszeiger; // siehe oben --groovemaster ...
Gibts denn ne wirklich andere, besser Lösung?
Keine Ahnung. Ich wollte nur damit sagen, dass es keinen Sinn macht den * immer zum Bezeichner zu schreiben, nur weil das im besagten Fall ansonsten zu Verwirrungen führt.
-
Naja du hast das geschrieben:
groovemaster schrieb:
Imo ist C/C++ an dieser Stelle einfach misdesigned. Stell dir mal folgendes vor, [Beispiel, wo jemand dummes die Deklarationssyntax von C++ mißversteht und daraufhin Fehler entstehen]
Soll das Beispiel etwa nicht begründen, dass "C/C++" "misdesigned" sind? Was dann? Und wo ist dann die Begründung?
void(int x) funktion; // hmm... // siehe oben (sofern du damit keine Funktionsdeklaration meinst) --groovemaster
Doch, was sonst?