Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Das_Kleine_C++;« ist der Autor dieses Themas

Beiträge: 59

Wohnort: 79104 Freiburg

  • Private Nachricht senden

1

06.07.2007, 16:05

frage zu char*

hi leute,

insgesamt fine ich Zeiger eigentlich schon ganz logisch... :)

nun hab ich grad eben gelesen, dass folgendes möglich ist...

C-/C++-Quelltext

1
2
char *pName;
pName = "Das_Kleine_C++;";

irgenwie seltsam, denn ich dachte pName kann nur auf einen anderen char
zeigen.
Auf was zeigt den pName jetzt?
mfg
Das_Kleine_C++; :roll:

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

06.07.2007, 16:49

Wenn man ganz genau auf den Standard schielt scheint das tatsächlich ein umstrittener Punkt zu sein, aber das würde jetzt wohl den Rahmen deiner Frage sprengen...

Im Grunde zeigt pName in deinem Fall auf das erste 'D' deiner Zeichenkette. Das besondere an C-Strings ist einfach, dass viele Funktionen eben nicht nur dieses erste D verarbeiten sondern solange alle darauffolgenden Buchstaben ebenfalls beachten, bis der Wert 0 (bzw. '\0') kommt - das wird automatisch hinter dein ';' gesetzt.

  • »Das_Kleine_C++;« ist der Autor dieses Themas

Beiträge: 59

Wohnort: 79104 Freiburg

  • Private Nachricht senden

3

06.07.2007, 17:49

achso,
also wenn ich richtig verstanden habe, dann können pointer sowohl auf variablen als auch direkt auf Werte zeigen(int, strings, char...),

vielen dank :D
Das_Kleine_C++;

Phili

unregistriert

4

06.07.2007, 17:53

Ein Pointer kann nur auf eine Variable und nicht auf einen Wert zeigen.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

06.07.2007, 17:54

Das ist genau der springende Punkt... eigentlich können Pointer eben nur auf Variablen zeigen, nur für die C-Strings gibt es so eine art 'Ausnahme', dass man eben den String einfach einem Pointer zuweisen kann... was dahinter steht ist im Grunde, dass ein Array von chars angelegt wird, und dann der Pointer die Adresse von diesem Teil erhält.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

06.07.2007, 18:00

Is ja nich wahr. Zeiger zeigen auf Speicherstellen, nicht auf Variablen. Eine Variable repräsentiert einen bestimmten Bereich im Speicher damit der Programmierer damit arbeiten kann, ein Zeiger zeigt auf diesen Speicherbereich. Ein C-String wird im statischen Speicher hinterlegt und kann somit auch über einen Zeiger angesprochen werden.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

06.07.2007, 18:14

Zitat von »"David_pb"«

Eine Variable repräsentiert einen bestimmten Bereich im Speicher damit der Programmierer damit arbeiten kann, ein Zeiger zeigt auf diesen Speicherbereich.


was ist dann so falsch daran zu sagen, dass der zeiger auf eine variable zeigt!?

Zitat von »"David_pb"«

Ein C-String wird im statischen Speicher hinterlegt und kann somit auch über einen Zeiger angesprochen werden.


wenn wir schon dabei sind: ein string literal wird im statischen speicher hinterlegt, c-strings allgemein bezeichnen nur nullterminierte arrays aus zeichen, die können überall sein. der grund warum ein solcher zeiger auf so einen string zeigen kann ist nicht, weil es eine "ausnahme" gibt, sondern einfach, weil in C/C++ pointer und arrays verwandte sind.

der umstrittene punkt ist die frage, ob man einem char* einen zeiger auf ein stringliteral zuweisen kann, der ja eigentlich vom typ const char* wäre. das geht nur aus kompatibilitätsgründen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

06.07.2007, 18:22

Zitat von »"dot"«

Zitat von »"David_pb"«

Eine Variable repräsentiert einen bestimmten Bereich im Speicher damit der Programmierer damit arbeiten kann, ein Zeiger zeigt auf diesen Speicherbereich.


was ist dann so falsch daran zu sagen, dass der zeiger auf eine variable zeigt!?


Ist es nicht, aber es ist falsch zu sagen ein Zeiger kann nur auf Variablen zeigen.

Zitat von »"dot"«


Zitat von »"David_pb"«

Ein C-String wird im statischen Speicher hinterlegt und kann somit auch über einen Zeiger angesprochen werden.


wenn wir schon dabei sind: ein string literal wird im statischen speicher hinterlegt, c-strings allgemein bezeichnen nur nullterminierte arrays aus zeichen, die können überall sein. der grund warum ein solcher zeiger auf so einen string zeigen kann ist nicht, weil es eine "ausnahme" gibt, sondern einfach, weil in C/C++ pointer und arrays verwandte sind.


Richtig, mir ist das Wort entfallen gewesen! :-) Aber C-Strings ist in der Tat die falsche Bezeichnung.

Zitat von »"dot"«

der umstrittene punkt ist die frage, ob man einem char* einen zeiger auf ein stringliteral zuweisen kann, der ja eigentlich vom typ const char* wäre. das geht nur aus kompatibilitätsgründen.


Drum sollt man auch immer const char* nutzen weils eigentlich die korrekte Variante ist da das string literal sich nicht ändern lässt, egal ob const char* oder char*.
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

06.07.2007, 19:29

Mir ging es in dieser Sache nicht um die ganzen theoretischen Hintergründe, sondern eher um den Fakt, dass praktisch (fast) alle Compiler es zulassen diese Zuweisung durchzuführen und dann auch noch praktisch die Möglichkeit besteht, diese Teile zu modifizieren...

Dass man eigentlich nicht so arbeiten sollte und dass es theoretisch nicht garantiert ist, dass man mit den string-literalen beliebig arbeiten kann ist wieder was anderes.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

06.07.2007, 19:57

Zitat von »"grek40"«

Mir ging es in dieser Sache nicht um die ganzen theoretischen Hintergründe, sondern eher um den Fakt, dass praktisch (fast) alle Compiler es zulassen diese Zuweisung durchzuführen und dann auch noch praktisch die Möglichkeit besteht, diese Teile zu modifizieren...

Dass man eigentlich nicht so arbeiten sollte und dass es theoretisch nicht garantiert ist, dass man mit den string-literalen beliebig arbeiten kann ist wieder was anderes.


Das kam in deinem Post aber irgendwie anders raus...
@D13_Dreinig

Werbeanzeige