PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ und Pointer (die 1000.)



TheGrudge
19-06-2007, 10:11
Hi,

ich habe die ganze Zeit über in Python und manchmal Java programmiert und muss nun C++ nutzen, finde die Sprache jedenfalls sehr verwirrend und irgendwie komisch.

Ein ganz besonderes Problem habe ich mit Pointern. Ich habe mir ein C++ Buch gekauft und da wurden Pointer immer so deklariert:


int *pointer = 0;

Nun fängt der im Buch plötzlich an, den Stern an den Typ zu binden:


int* pointer

Wo ist denn da der Unterschied? Oder ist das einfach eine andere Schreibweise, die das selbe macht? Ich finde nirgends einen gescheiten Hinweis, weder Buch noch Google. Ist ja auch schwierig nach so etwas zu googlen wenn man nicht weiß wie man das da nennen soll.

sommerfee
19-06-2007, 11:01
Wo ist denn da der Unterschied? Oder ist das einfach eine andere Schreibweise, die das selbe macht?

Ja, das ist das gleiche in grün. Beide Schreibweisen haben IMHO ihre Vor- und Nachteile:


int* pointer;

soll wohl verdeutlichen, daß der * zum Typ gehört, was er ja auch tut. "Typ" und "Name" sind also durch ein Leerzeichen getrennt. Schön! Dies geht aber nur solange so schön, solange es nur eine Variable ist, die man deklariert:


int* pointer, a;

Dies suggeriert von der Notation, daß hier zwei Pointer deklariert werden. Dies ist aber nicht der Fall! Es müsste dann (logischerweise) heißen:


int* pointer, * a;

Daher tendiere ich persönlich zur anderen Schreibweise, also


int *pointer

Liebe Grüße,
Axel

TheGrudge
19-06-2007, 11:52
Ok, danke schön.
Fand es nur komisch der auf einmal es so notiert wurde und kein Hinweis im Buch erfolgt ist, ich dachte schon ich habe irgendwas übersehen.

TheGrudge
19-06-2007, 12:35
Nur nochmal zur Absicherung:


int main(int argc, char* argv[])
int main(int argc, char *argv[])
int main(int argc, char **argv)

ist alles das selbe? Doppelsternchen kann man wohl machen da ein Array irgendwie als Pointer aufgefasst werden kann und im letzten Falle ein Pointer auf einen Pointer ist?

anda_skoa
19-06-2007, 14:17
Ja, das ist alles äquivalent.

So komplizierte Deklarationen hast du aber meistens eh nur in C Code oder C kompatiblen Code, in C++ Code ist die Schreibweise der von Java schon ziemlich ähnlich, vorallem wenn man mal mit shared pointers arbeitet.

Ciao,
_