Zeiger auf eine Zeichenkette in C?

8
%Vor%

Ich weiß, dass ptrChar ein Zeiger auf char ist. Was ist der Befehl für einen Zeiger auf string ?

Edit: Wenn es dasselbe ist (ptr to char vs. ptr to string) - was stellt die folgende Variablendefinition dar?

%Vor%

Ich bin verwirrt.

    
user1980750 01.03.2013, 23:42
quelle

4 Antworten

17

Die gleiche Notation wird verwendet, um auf ein einzelnes Zeichen oder das erste Zeichen einer nullterminierten Zeichenkette zu zeigen:

%Vor%

Die Werte in ptr2 und ptr3 sind gleich; das gleiche gilt für die Werte in ptr4 und ptr5 . Wenn Sie einige Daten als Zeichenfolge behandeln möchten, müssen Sie sicherstellen, dass sie null terminiert ist und dass Sie wissen, wie viel Speicherplatz Sie verwenden können. Viele Probleme werden dadurch verursacht, dass man nicht versteht, welcher Speicherplatz verfügbar ist, und nicht wissen, ob der String ordnungsgemäß mit null beendet wurde.

Beachten Sie, dass alle oben genannten Zeiger dereferenziert werden können, als wären sie ein Array:

%Vor%

Späte Ergänzung zu Frage

  

Was bedeutet char (*ptr)[N]; ?

Das ist ein komplexeres Tier. Es ist ein Zeiger auf ein Array von N -Zeichen. Der Typ ist ganz anders; die Art, wie es benutzt wird, ist ganz anders; Die Größe des Objekts, auf das gezeigt wird, ist ziemlich unterschiedlich.

%Vor%

Beachten Sie, dass ptr + 1 auf undefiniertes Gebiet zeigt, aber auf ein Array von 12 Bytes jenseits des Beginns von a zeigt. Gegeben ein etwas anderes Szenario:

%Vor%

Jetzt:

%Vor%

Sie werden wahrscheinlich nicht lange auf Zeiger auf Arrays stoßen, nur zufällig. Ich habe sie ein paar Mal in den letzten 25 Jahren benutzt, aber so wenige, dass ich die Gelegenheiten an den Fingern einer Hand zählen kann (und einige von ihnen haben Fragen zu Stack Overflow beantwortet). Abgesehen davon zu wissen, dass sie existieren, dass sie das Ergebnis sind, die Adresse eines Arrays zu nehmen, und dass Sie es wahrscheinlich nicht wollten, brauchen Sie nicht wirklich mehr über Zeiger auf Arrays zu wissen.

    
Jonathan Leffler 01.03.2013, 23:45
quelle
9

Das Gleiche. Eine C-Zeichenfolge ist nichts anderes als ein Array von Zeichen. Daher ist ein Zeiger auf eine Zeichenfolge ein Zeiger auf ein Array von Zeichen. Und ein Zeiger auf ein Array ist der gleiche wie ein Zeiger auf sein erstes Element.

    
Thomas 01.03.2013 23:44
quelle
1

Die Zeichenfolge ist im Grunde von der Stelle, auf die sie zeigt ( char *ptrChar; ), bis zum Nullzeichen ( char *ptrChar; ) beschränkt. Das ptrChar[x] zeigt tatsächlich auf den Anfang der Zeichenfolge (char-Array), und das ist also der Zeiger auf diese Zeichenfolge, Wenn Sie also beispielsweise %code% mögen, greifen Sie tatsächlich x-mal nach dem Beginn des Charts auf den Speicherort zu (von dem aus ptrChar gerade verweist).

    
SmRndGuy 01.03.2013 23:51
quelle
1

Eine C-Zeichenfolge ist nichts anderes als ein Array von Zeichen. Daher ist ein Zeiger auf eine Zeichenfolge ein Zeiger auf ein Array von Zeichen. Und ein Zeiger auf ein Array ist der gleiche wie ein Zeiger auf sein erstes Element. Die Zeichenfolge ist im Grunde von der Stelle, an die sie gerichtet ist (char * ptrChar;), bis zum Nullzeichen (\ 0) begrenzt.

    
Sachin Sridhar 29.11.2015 08:05
quelle

Tags und Links