Re: [maillist] C++ Problem

Dr.Stephan Melin (stephan.melin@neuss.netsurf.de)
Wed, 18 Aug 1999 22:07:18 +0200

On Wed, 18 Aug 1999, you wrote:
>> char jnn[] =3D "n";=0D
>Jetzt will ichs aber wissen: "n" ist doch ein String und 'n' ein Char, o=
der?=0D
>=0D
>Thomas

Du hast recht 'n' ist tats=E4chlich ein char, "n" aber als String zu beze=
ichnen
- ich wei=DF nicht...

Hier nun ganz genau:
Die linke Seite des Ausdrucks =20
=3D "n" =20
liefert Dir einen Wert vom Typ=20
char *
Dereferenzierst Du diesen Pointer so zeigt er auf einen char mit dem Wert=
'n'.
Also bei obigem Beispiel:
*jnn =3D=3D 'n'
An der n=E4chsten Stelle steht dann ein Null-Char:
*(jnn+1) =3D=3D '\0'
Die Deklaration=20
char jnn[]
ist eine andere Schreibweise f=FCr
char *

Also hei=DFt:
char jnn[] =3D "n";
nichts weiter als:
Deklariere den character-Pointer jnn und initialisiere ihn mit der Adress=
e des
Speicherbereichs in dem die chars 'n' und '\0' hintereinanderstehen. (Wie=
so
klingt das in deutsch eigentlich so f=FCrchterlich geschraubt?)

Wenn Du tiefer in diese Materie einsteigen willst, empfehle ich Dir den K=
&R 2nd
Ed. (also die ANSI C Version vom Kernighan Ritchie).
In den C++ B=FCchern steht so etwas nicht mehr richtig drin (C++ ist eh n=
ur etwas
f=FCr Flachsch=E4del und Warmduscher von heute...
;-) ;-) ;-) for the humor impaired...

Diese ganze Geschichte mit den "Strings" in C (ANSI und pr=E4-ANSI) setzt=
sich in
C++ fort. Deswegen hat man dann endlich bei C++ zus=E4tzlich die STL (Sta=
ndard
Template Library) geschaffen, die nun endlich "richtige" Strings bereitst=
ellt
(intern stellen die die nat=FCrlich wieder =FCber die =FCblichen Pointer =
dar, aber
das braucht den Entwickler nicht mehr zu st=F6ren). Diese Strings sind da=
nn sch=F6n
als Klassen definiert und verhalten sich dann auch (fast) so wie man es a=
us
einigen anderen Sprachen gewohnt ist.

Beste Gr=FC=DFe

=09Stephan

P.S.: Richtig verstanden mit den Pointern in C hat man es dann nur, wenn =
man
verstanden hat, warum folgendes Konstrukt bei einem ANSI(!!!!!)-C Compile=
r (ein
C++ Compiler meckert nat=FCrlich auch) zu b=F6sen Fehlermeldungen f=FChrt=
:
=2E..
int a[2][3];
int **b;
int x[4];
int *y;
=2E..
y =3D x; /* funktioniert... */
b =3D a; /* aber hier knallt's! */
=2E..

--
Dr. Stephan Melin
EMail: stephan.melin@neuss.netsurf.de
Voice: +49-211-6006190