Strings werden hauptsächlich zum Programmieren verwendet. Strings ähneln Zeichenarrays im Speicher, sodass ein einzelnes Element jedes Bits extrahiert werden kann. Beispielsweise s="abcdefghij", dann s[1]="a", s [9]="j", und die Nullposition der Zeichenfolge entspricht genau ihrer Länge, z. B. s[0]=10 (※Ansistring verfügt nicht über die obige Funktion.) Dies kann uns viel Komfort bieten, z Als hochpräzise Operationen kann jedes Bit in eine Zahl umgewandelt und in einem Array gespeichert werden.
Für die Zeichenfolgenzuweisung gelten jedoch bestimmte Anforderungen. Beispielsweise können C-Sprachoperatoren überhaupt nicht mit Zeichenfolgen arbeiten. In der C-Sprache werden Zeichenfolgen als Arrays behandelt. Daher unterliegen sie den gleichen Einschränkungen wie Arrays. Insbesondere können sie nicht mit C-Sprachoperatoren kopiert und verglichen werden.
String-Zuweisungsmethode
In der C-Sprache gibt es zwei Formen des String-Ausdrucks: Eine liegt in Form eines Zeichenarrays vor, z. B. char str[20] ="Ich liebe China"; Der andere hat die Form eines Zeichenzeigers, wie zum Beispiel char *str="Ich liebe China". Zeichenfolgen können Zeichenzeigervariablen zugewiesen werden oder Zeichenfolgen können in Zeichenarrays gespeichert werden. Weil die C-Sprache keine direkte syntaktische Zuckerunterstützung für Zeichenfolgen bietet. Darüber hinaus verarbeiten viele Methoden der C-Standardbibliothek Zeichenfolgen auf der Grundlage der Nullzeichenterminierung, die beachtet werden muss.
char *p,a='5'; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值??
Im obigen Programm bewirken doppelte Anführungszeichen drei Dinge: Platzieren (im Konstantenbereich) und Speichern der Zeichenfolge; Hinzufügen von „/0“ am Ende der Zeichenfolge; Hier wird die zurückgegebene Adresse p zugewiesen.
Aber warum funktioniert der Ausdruck char *p = „hello“; aber das Ändern von p in ein Array und das anschließende Zuweisen eines Werts funktioniert nicht. Dies liegt daran, dass, wenn die Zeichenfolgenkonstante „hello“ in einem Ausdruck erscheint, der vom „hello“-Ausdruck verwendete Wert die Adresse ist, an der diese Zeichen gespeichert sind (im Konstantenbereich), und nicht die Zeichen selbst.
Sie können also einem Zeiger p, der auf ein Zeichen zeigt, eine Zeichenfolge zuweisen, aber Sie können keine Zeichenfolge einem Zeichenarray zuweisen.
char a[10] = „hello“; Dies ist auch durch die C-Sprachinitialisierung möglich. Wenn es als char a[10] geschrieben wird, dann ist a = „hello“ das falsch. Es ist auch ein Array von a, char a[10] = „hello“; dies ist die Initialisierung des Arrays und es ist dasselbe wie a[0] = ‚h‘ a[1] = ‚e‘….
Aber das Ändern in char a [10] und dann a = „hello“ funktioniert nicht. Der Wert, der „hello“ zugewiesen wird, ist eine Adresse, und obwohl a auch eine Adresse hat, unterscheidet sich dies von Ein Zeiger. Der Wert von ist eine Adresse, und obwohl der Wert des Arrays auch eine Adresse ist, ist er eine Konstante, sodass einer Konstanten kein Wert zugewiesen werden kann. [3]
Lassen Sie es uns testen:
#include <stdio.h> int main(){ char *p = "hello"; printf("%s",p); char a[10]; a = "hello"; return 0;}error C2440: '=' : cannot convert from 'char [6]' to 'char [10]' There is no context in which this conversion is possible
Wenn Sie eine solche Fehlermeldung sehen, versuchen Sie, char a[10] in char a[6] zu ändern.
error C2106: ‘=’ : left operand must be l-value
Die linke Seite Seite des Operators sollte ein „L-Wert“ sein. Der sogenannte „L-Wert“ bezieht sich auf die Menge, die im Programm Speicherplatz belegt und geändert werden kann, wie z. B. verschiedene Variablen.
Bei Verwendung eines Zeigers kann der Zeiger erhöht werden, der Array-Name kann jedoch nicht erhöht werden. Der Compiler weist dem Array Speicherplatz zu, und die Adresse des Arrays a stellt eine Konstante dar definitiv nicht möglich.
Gleichzeitig identifiziert der Compiler beim Erhöhen des Zeigers automatisch den Typ. Wenn der Zeiger beispielsweise auf den Typ int zeigt und Sie die nächste Adresse abrufen möchten, p++ den Zeiger. Verwenden Sie nicht p+4.
Es ist zu beachten, dass bei Verwendung von Void-Zeigern keine Zeigerarithmetik verwendet werden kann, da der Void-Compiler die Länge des Typs (dh das Volumen des Objekts, auf das der Zeiger zeigt) nicht erkennen kann ist für p++ unzulässig, das heißt, mathematische Operationen können nicht ausgeführt werden, und die *-Wert-Operation kann nicht verwendet werden. Wenn Sie sie verwenden möchten, müssen Sie sie in andere Typen konvertieren.
Das obige ist der detaillierte Inhalt vonWas bedeutet String-Zuweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!