ich befasse mich gerade etwas mit C++, bin gerade bei den Pointern, und da kommen jetzt erste Fragen auf. Ich orientiere mich an diesem Tutorial, habe bisher von vorne bis zu den Pointern durchgemacht (war ja auch noch nicht so viel) und hab dann jetzt folgendes Problem:
Tutorial: http://www.cplusplus.com/doc/tutorial/tut3-3.html | Überschrift: Pointer initialization
Zitat
As in the case of arrays, the compiler allows the special case that we want to initialize the content at which the pointer points with constants at the same moment as declaring the variable pointer:
char * terry = "hello";
in this case static storage is reserved for containing "hello" and a pointer to the first char of this memory block (that corresponds to 'h') is assigned to terry
(...)
it is important to indicate that terry contains the value 1702 and not 'h' nor "hello", although 1702 points to these characters.
...
(Dazu sei zu sagen, dass in diesem Tutorial der Wert 1702 als Beispieladressierung im Speicher gewählt wurde. Das ist also die Adresse im Speicher, als Beispiel).
So, es geht um den letzten Satz. Der ist besonders wichtig bzw. mir nicht ganz verständlich. Bisher hab ich es so registriert, dass wenn ich einen Pointer erstelle, die so mache:
So, wenn ich mir nun per "cout"-Funktion "pointer" ausgeben lasse, erhalte ich die darin gespeicherte Adresse zu "Variable". Lasse ich mir "*pointer" anzeigen, so gibt er mir den Wert der Variable, also 9 aus. Soweit so gut. Nun macht mir das Tutorial-Beispiel oben mit dem String aber Probleme.
So sieht mein Programmchen aus:
Wer sich das ausgeben lässt, erkennt, dass nun der Inhalt des Pointers terry jetzt nicht die Speicheradresse des ersten Characters von "Hello" enthält sondern den kompletten String "Hello". Dahingegen ist der Wert des Pointers, also mit *terry jetzt nur das "h", also der erste charakter. Die Speicheradresse von terry, also per &terry liefert mir dann erst den gewünschten Speicherwert von "hello".
Wie soll ich diese Unstimmigkeiten nun verstehen? Warum kann "terry" hier nicht wieder die Speicheradresse enthalten und *Terry dann eben das "Hello" oder das "H"?
Zitat
it is important to indicate that terry contains the value 1702
...
Darum geht's, wieso zeigt er mir dennoch "Hello" an, anstelle des Speicherswertes 1702 (welcher hier als Beispiel genommen ist)?
Im Tutorial wird erwähnt, dass diesmal der Pointer einen Speicherbereich (also Buffer) reserviert, von 6 Byte. Kann ich jetzt darauf schließen, dass wenn man nicht explizit per "&-Operator" die Speicheradresse in den Pointer schreibt, sondern eben die Zeichenkette "Hello", dass dann der Pointer nicht die Adresse sondern diesen Speicherbereich als eine Art Buffer sich anlegt und wiedergibt? Wie kann man das anständig Unterscheiden, wann was durch ein simples "cout<<pointer"; zurückgegeben wird und wann dann * und & nötig ist?
Ich hoffe hier gibt's jemanden der mir das anschaulich vermitteln kann, ist etwas verwirrend.