Maison  >  Article  >  développement back-end  >  Que signifie l’affectation de chaînes ?

Que signifie l’affectation de chaînes ?

藏色散人
藏色散人original
2019-06-04 10:19:179888parcourir

Les chaînes sont principalement utilisées pour la programmation. Les chaînes sont similaires aux tableaux de caractères stockés, donc un seul élément de chaque bit peut être extrait, par exemple, s="abcdefghij", puis s[1]="a", s. [9]="j", et la position zéro de la chaîne est exactement sa longueur, comme s[0]=10 (※Ansistring n'a pas la fonction ci-dessus.) Cela peut nous apporter beaucoup de commodité, comme comme opérations de haute précision, chaque bit peut être converti en nombre et stocké dans un tableau.

Que signifie l’affectation de chaînes ?

Cependant, l'affectation de chaînes a certaines exigences. Par exemple, les opérateurs du langage C ne peuvent pas du tout opérer sur les chaînes. En langage C, les chaînes sont traitées comme des tableaux. Par conséquent, les chaînes sont soumises aux mêmes restrictions que les tableaux. En particulier, elles ne peuvent pas être copiées et comparées à l'aide des opérateurs du langage C.

Méthode d'affectation de chaîne

En langage C, il existe deux formes d'expression de chaîne : l'une se présente sous la forme d'un tableau de caractères, comme char str[20] ="J'aime la Chine"; L'autre se présente sous la forme d'un pointeur de caractère, tel que char *str="J'aime la Chine". Les chaînes peuvent être affectées à des variables de pointeur de caractère ou les chaînes peuvent être stockées dans des tableaux de caractères. Parce que le langage C ne fournit pas directement de support syntaxique pour les chaînes. De plus, de nombreuses méthodes de la bibliothèque standard C traitent les chaînes en fonction de la terminaison nulle, dont il faut se souvenir.

char *p,a='5';
p=&a;                     //显然是正确的,
p="abcd";              //但为什么也可以这样赋值??

Dans le programme ci-dessus, les guillemets doubles font trois choses : demander de l'espace (dans la zone constante) et stocker la chaîne ; ajouter '/0' à la fin de l'adresse de retour ; Ici, l'adresse renvoyée est attribuée à p.

Mais pourquoi l'expression char *p = “hello”; fonctionne-t-elle, mais changer p en tableau puis attribuer une valeur ne fonctionne pas. En effet, lorsque la constante chaîne "hello" apparaît dans une expression, la valeur utilisée par l'expression "hello" est l'adresse où ces caractères sont stockés (dans la zone constante), et non les caractères eux-mêmes.

Ainsi, vous pouvez attribuer une chaîne à un pointeur p qui pointe vers un caractère, mais vous ne pouvez pas attribuer une chaîne à un tableau de caractères.

char a[10] = "hello"; Ceci est également possible. Cette situation est prise en charge par l'initialisation du langage C. S'il est écrit sous la forme char a[10] alors a = "bonjour", c'est faux. C'est aussi un tableau de a, char a[10] = « hello » ; c'est l'initialisation du tableau, et c'est la même chose que a[0] = 'h' a[1] = 'e'….

Mais le changer en char a [10], puis a = "hello" ne fonctionnera pas. La valeur attribuée à "hello" est une adresse, et bien que a ait aussi une adresse, celle-ci est différente de. un pointeur. Un pointeur La valeur de est une adresse, et bien que la valeur du tableau soit également une adresse, c'est une constante, donc une constante ne peut pas recevoir de valeur. [3]

Testons-le :

#include <stdio.h> int main(){       char *p = "hello";        printf("%s",p);       
        char a[10];        a = "hello";      
        return 0;}error C2440: &#39;=&#39; : cannot convert from &#39;char [6]&#39; to &#39;char [10]&#39;        There is no context in which this conversion is possible

Lorsque vous voyez un tel message d'erreur, essayez de remplacer char a[10] par char a[6]

error C2106: ‘=’ : left operand must be l-value

La gauche le côté de l'opérateur doit être une "lvalue". La "lvalue" fait référence à la quantité qui occupe de l'espace mémoire dans le programme et qui peut être modifiée, comme diverses variables.

Lors de l'utilisation d'un pointeur, le pointeur peut être incrémenté, mais le nom du tableau ne peut pas être incrémenté. Le compilateur alloue de l'espace au tableau et l'adresse du tableau a représente une constante. certainement pas possible.

En même temps, lorsque le pointeur est incrémenté, le compilateur identifiera automatiquement le type. Par exemple, si le pointeur pointe vers type int, lorsque vous souhaitez obtenir l'adresse suivante, il suffit de p++ le pointeur. N'utilisez pas p+4 .

Il convient de noter que lors de l'utilisation de pointeurs void, l'arithmétique du pointeur ne peut pas être utilisée car le compilateur void ne peut pas reconnaître la longueur du type (c'est-à-dire le volume de l'objet pointé par le pointeur). illégal pour p++, c'est-à-dire que les opérations mathématiques ne peuvent pas être effectuées et que l'opération de valeur * ne peut pas être utilisée. Si vous souhaitez l'utiliser, vous devez la convertir en d'autres types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn