C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

was bedeutet "void funktionsname (char* parameter)

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Alexander Siems
Guest





PostPosted: Thu Sep 23, 2004 4:46 pm    Post subject: was bedeutet "void funktionsname (char* parameter) Reply with quote



Hallo,

ich bin vor kurzen damit angefangen mich mit C++ zu beschaeftigen und habe
nun folgende Frage:

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

oder sind das unterschiedliche Anweisungen?
warum schreibt man mal das eine und manchmal das andere?
--
Gruss,

Alex

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Gilbert Jeiziner
Guest





PostPosted: Sun Sep 26, 2004 1:36 pm    Post subject: Re: was bedeutet "void funktionsname (char* parameter) Reply with quote



Alexander Siems wrote:
Quote:
Hallo,

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

oder sind das unterschiedliche Anweisungen?
warum schreibt man mal das eine und manchmal das andere?

Die Schreibweisen sind ein und dasselbe. Was eingesetzt wird, ist
meist nach Gusto des Programmieres. Ich bevorzuge die zweite
Variante (Typ und Variable sind klar getrennt), oft sehe ich
jedoch auch die andere Variante.
--
Gilbert Jeiziner - gpg-key: 0xEC853957

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)

iD8DBQFBVsXVP25yTuyFOVcRAgzoAKCVWV6eyzdT/kF/bS4c72Lwp88CAwCfdSDs
6142bSmboCOJwjChQc/riTU=
=/MD0
-----END PGP SIGNATURE-----


Back to top
Martin Winkler
Guest





PostPosted: Sun Sep 26, 2004 1:52 pm    Post subject: Re: was bedeutet "void funktionsname (char* parameter) Reply with quote



Alexander Siems wrote:
Quote:
Hallo,

ich bin vor kurzen damit angefangen mich mit C++ zu beschaeftigen und habe
nun folgende Frage:

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

oder sind das unterschiedliche Anweisungen?
warum schreibt man mal das eine und manchmal das andere?

Es ist exakt dasselbe und der Unterschied ist reine Geschmackssache. Die
erste Variante ist aber einleuchtender bei Mehrfachdeklarationen:

int *a, b; // ein int* und ein int
int* a, b; // auch ein int* und ein int, auch wenn es anders aussieht.

Gruß
Martin

--
http://www.jumli.de
http://www.jumlidev.de/forum/

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Lars H. Rohwedder
Guest





PostPosted: Sun Sep 26, 2004 6:04 pm    Post subject: Re: was bedeutet "void funktionsname (char* parameter) Reply with quote

Alexander Siems <alexander.siems (AT) ewetel (DOT) de> schrob:
Quote:
Hallo,

ich bin vor kurzen damit angefangen mich mit C++ zu beschaeftigen und
habe nun folgende Frage:

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

oder sind das unterschiedliche Anweisungen?

Nein.

Quote:
warum schreibt man mal das eine und manchmal das andere?

Weil beide Schreibweisen suboptimal sind.

Deklarationen in C und C++ lassen sich leichter von rechts nach links
lesen. Der * in der Deklaration liest sich dabei wie "ist Zeiger auf".
Damit liest man:

int* a; // "a ist (eine Variable vom Typ) »Zeiger auf int«"

Soweit sogut.

Leider hat C++ von C die Syntax geerbt, so dass man mehrere Variablen
in einer Deklarationsanweisung deklarieren (und definieren) kann:

int x,y,z;

Auch gut, sowas braucht man ja öfter.

Ekelig wird es nun aber bei Zeigervariablen, denn leider "bindet" der
Stern stärker an die Variable als an den Typ, und somit wird die
Anweisung

int* a,b,c;

nicht drei int-Zeiger anlegen, sondern einen int-Zeiger a und zwei
int-Variablen b und c. :-(

Darum bevorzugen es viele, den Stern an die Variable zu schreiben.
Damit lassen sich recht "üble" Deklarationsanweisungen schreiben:

int *a, *b, c, *d, *e, f, g;

Jetzt ist auf den ersten Blick klar, was int-Variablen und was
Zeigervariablen sind. Ob man solche Marathon-Deklarationen selber
schreibt, muss jeder selber wissen. Lesen sollte man sie aber können.

Unter C scheint es üblicher zu sein, den Stern an die Variable zu
schreiben, unter C++ tendieren viele eher dazu, den Stern an den Typ zu
schreiben, da er als zum Typ zugehörig empfunden wird. Außerdem sind
Marathon-Deklarationen in C++ auch seltener, da man Variablen erst dann
zu deklarieren braucht, wenn man sie benötigt und nicht auf Schlag am
Anfang eines Funktionsrumpfes, wie unter C.

Letzten Endes kannst du sogar sowas schreiben:

int * a;
int*b;

Letzteres könnte aber bei nichttrivialen Typ- und Variablennamen wie
eine Multiplikation aussehen, auch wenn sie keine ist:

yuk*fump; // wo bleibt der Rückgabewert? Ach nee, yuk ist ja ein Typ!


Ich hoffe, jetzt sind alle Klarheiten beseitigt. :-)


Lars R.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Anry Sauer
Guest





PostPosted: Mon Sep 27, 2004 7:27 am    Post subject: Re: was bedeutet "void funktionsname (char* parameter) Reply with quote


Am 27.09.2004 um 09:17 wurde geantwortet auf:
Alexander Siems <alexander.siems (AT) ewetel (DOT) de> schrieb:
Quote:
Hallo,

ich bin vor kurzen damit angefangen mich mit C++ zu beschaeftigen und habe
nun folgende Frage:

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

Total egal.
Manchmal schreibt man:

int* a, b, c;

das bedeutet ein Zeiger - a und zwei 'int' Variablen - b, c.
Aber wenn du dies überschreibst:

typedef int* MY_INT_PTR;
[...]
MY_INT_PTR a, b, c;

dann wird alles super klar.

Gruß
Anry

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Horst Kraemer
Guest





PostPosted: Mon Sep 27, 2004 11:45 am    Post subject: Re: was bedeutet "void funktionsname (char* parameter) Reply with quote

Alexander Siems <alexander.siems (AT) ewetel (DOT) de> wrote:

Quote:
Hallo,

ich bin vor kurzen damit angefangen mich mit C++ zu beschaeftigen und habe
nun folgende Frage:

Ist es egal, ob ich schreibe:

int *pZeiger;

oder

int* pZeiger;

oder sind das unterschiedliche Anweisungen?

Alles dasselbe

int *p;

int* p

int*p;

int * p;

int
*
p;

Quote:
warum schreibt man mal das eine und manchmal das andere?

Das ist eine Religionsfrage. Rein formal nach Sprachdefinition ist
hier 'int' der Typ und '*p' der Deklarator, und eine
Mehrfachdeklaration hat vereinfacht die Syntax

Typ Deklarator,Deklarator,...,Deklarator;

so dass

int * a , b;

einen int-Zeiger a und einen int b deklariert. Im Lichte dieses
theoretischen Wissens erscheint es sinnfaelliger, den * an die
deklarierte Variable zu kleben, weil er formal halt zur Variablen und
nicht zum Typnamen gehoert. So halten es fast alle C-Programmierer.

Was bei einer Mehrfachdeklartion zum 'Typ' und was zum Deklarator
gehoert, etscheided sich bei der Deklaration der ersten Variablen.

Hier

int const a, b;

ist z.B. 'int const' der Typ und a,b die Deklaratoren, weil 'const a'
kein Deklarator ist, und b ist daher hier ein konstanter int.


Hier

int * const a, b;

ist nur 'int' der Typ und die Deklaratoren sind '* const a' und b, so
dass b hier ein (nicht konstanter) int ist.

Stroustrup (der Erfinder von C++) hat die Schreibweise

int* p;

eingefuehrt (und die Mehrzahl der C++-Programmierer folgt wohl diesem
Beispiel), weil es nach seiner Meinung intuitiv

"p ist ein int-Zeiger"

bedeutet, waehrend die eigentliche formale Bedeutung der Deklaration
ist

"*p ist ein int"

Es ist halt so, dass die Deklarationssyntax von C und C++ nicht
beschreibend, sondern "operationell" ist, d.h.

int * (*p)();

ist nicht zu lesen als "p ist ein bla" (geht hier auch schlecht
"intuitiv"), sondern als "wenn man p deferenziert, das Ergebnis
aufruft, und das Ergebnis des Aufrufs derefenziert, kommt ein int
heraus.

Das muss man dann im Kopf zusammensetzen zu "p ist ein Zeiger auf eine
Funktion, die einen Zeiger auf int zurueckgibt", wenn man sich
Deklarationen unbedingt in der Form "p ist ...." vorstellen moechte.

--
Horst

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.