Verständisfrage zu Pointern und char[]
Verfasst: Mi Apr 20, 2016 1:57 am
Ich habe ein kleines Verständisproblem mit Pointern und auch mit dem char Array (char[]) und würde das gerne mal anhand von Beispielen ein wenig hier durchsprechen, falls das für euch okay ist. Soweit ich das ja verstanden habe ist ein Pointer, egal von welchem Typ ein Zeiger auf eine Speicheradresse und wen man nur ptr schreibt kriegt man das, was sich in der Speicheradresse befindet, also bspw. so einen Pointer hier hat:
dann würde man ja wenn man das mit
ausgibt hello erhalten und wenn man ansatt von ptr *ptr schreibt die Speicheradresse als Ausgabe erhalten, das ist doch soweit schon einmal richtig oder?
Was ich jetzt aber bei einigen Beispielen die ich gefunden habe oder bei Codestücken die ich gefunden habe nicht ganz verstehe, ist z.B
Man hat dann also einen buffer wo irgendetwas aus einer Datei steht aber kann man echt so prüfen, ob da in dem Sinne überhaupt etwas drinsteht, also sprich ein leerer String an der Speicheradresse oder ein einfach Null-terminierter String oder was bewirkt die Zeile sonst? Hier auch bspw. wieder so eine Zeile, wo eine Datei geparst wird:
Dadurch wird dann ja geprüft ob der Buffer nicht NULL ist und sich an der aktuellen Position im Buffer ein Leerzeichen befindet und falls das der Fall ist, geht man im Buffer weiter oder liege ich damit falsch? Darf man das dann so verstehen, dass das dann wie ein Array im Prinzip fungiert oder wie kann man das erklären, also das da dann (sozusagen) buffer steht? Ansonsten verstehe ich echt nicht, was der Code bewirken soll.
Auch noch einmal zu dem char Array:
Soweit ich das auch verstanden habe, sollte man aber auch eigentlich einen String in C mit einem char Arrray definieren aber wieso sieht man dann dennoch oft ein char * als String? Ist das weil es manche vielleicht auch nicht besser wissen? Irgendwie verstehe ich auch noch nicht ganz, wann man besser was benutzen sollte. Ein Pointer ist ja read-only, während man ein Array ja verändern kann, wie in jeder anderen Sprache oder ist der wesentliche Vorteil von Pointern das man den Speicher dynamisch assozieren kann, während man bei einem Array ja immer die Größe mit angeben muss?
Ich würde mich daher falls ich falsch liegen sollte oder falsch man das so nicht sagen kann, sehr über eine Antwort freuen, wie man das ganze dann richtig erklären könnte bzw. wie man das dann richtig ausdrücken würde.
Code: Alles auswählen
char *ptr = "hello"
Code: Alles auswählen
printf("%s", ptr);
Was ich jetzt aber bei einigen Beispielen die ich gefunden habe oder bei Codestücken die ich gefunden habe nicht ganz verstehe, ist z.B
Code: Alles auswählen
if(*buffer == '\0')
return 0;
Code: Alles auswählen
while(*buffer && isspace(*buffer))
++buffer;
Auch noch einmal zu dem char Array:
Soweit ich das auch verstanden habe, sollte man aber auch eigentlich einen String in C mit einem char Arrray definieren aber wieso sieht man dann dennoch oft ein char * als String? Ist das weil es manche vielleicht auch nicht besser wissen? Irgendwie verstehe ich auch noch nicht ganz, wann man besser was benutzen sollte. Ein Pointer ist ja read-only, während man ein Array ja verändern kann, wie in jeder anderen Sprache oder ist der wesentliche Vorteil von Pointern das man den Speicher dynamisch assozieren kann, während man bei einem Array ja immer die Größe mit angeben muss?
Ich würde mich daher falls ich falsch liegen sollte oder falsch man das so nicht sagen kann, sehr über eine Antwort freuen, wie man das ganze dann richtig erklären könnte bzw. wie man das dann richtig ausdrücken würde.