Pointeurs de chaînes
Publié : dim. 30/juil./2006 12:34
Je vais relancer le débat pour apporter une proposition de syntaxe pour obtenir le vrai pointeur d'une chaine de caractère. 
Pour résumer la chose:
Une chaine de caractère c'est une suite d'octet qui démarre à l'adresse X
Une variable S contient l'adresse X, cette variable S se situe à l'adresse Y
L'opérateur @ qui permet d'obtenir l'adresse Y d'une variable retourne l'adresse X dans le cas d'une chaine.
En utilisant la Structure String il est possible de pointer sur des chaines
Un pointeur *P de type String nécessite l'adresse Y de la chaine S
il est possible de passer par un pointeur temporaire *T pour obtenir une adresse Y
(qui ne sera même pas l'adresse de S mais celle de *T)
l'utilisation du pointeur temporaire n'est donc pas fiable à 100%
Un petit code d'exemple pour l'illustrer
Donc tout ca pour dire (j'ai essayé de faire simple dans mes explications) que dans la mesure où il n'est pas possible de pointer sur une chaine avec l'opérateur @, je suggère un nouvel opérateur qui servira à pointer uniquement sur les chaines de caractères (dans des variables, tableaux listes et/ou structures...).
@S retourne l'adresse X de la chaine
@@S retournerai l'adresse Y de la chaine
Dri

Pour résumer la chose:
Une chaine de caractère c'est une suite d'octet qui démarre à l'adresse X
Une variable S contient l'adresse X, cette variable S se situe à l'adresse Y
L'opérateur @ qui permet d'obtenir l'adresse Y d'une variable retourne l'adresse X dans le cas d'une chaine.
En utilisant la Structure String il est possible de pointer sur des chaines
Un pointeur *P de type String nécessite l'adresse Y de la chaine S
il est possible de passer par un pointeur temporaire *T pour obtenir une adresse Y
(qui ne sera même pas l'adresse de S mais celle de *T)
l'utilisation du pointeur temporaire n'est donc pas fiable à 100%
Un petit code d'exemple pour l'illustrer
Code : Tout sélectionner
;déclaration des variables
s.s = "PureBasic"
*p.String
*t
;pointe sur s par l'intermédiaire de *t
*t = @s
*p = @*t
Debug *p\s ;là c'est bon
;change la valeur de s à l'aide de *p
*p\s = "Hello"
Debug s ;là c'est toujours bon
;rechange la valeur de s à l'aide de *p
*p\s = Space(10000)
Debug s ;affiche Hello au lieu d'une longue série d'espaces
@S retourne l'adresse X de la chaine
@@S retournerai l'adresse Y de la chaine
Dri
