L'adresse de la chaîne peut maintenant être déterminée, et transmise à la procédure. Ainsi, tant que les chaînes elles-mêmes ne sont pas utilisées dans la procédure, vous devriez rester en sécurité.
Un autre danger peut survenir si vous essayez de POKE des valeurs directement dans une chaîne.
Essayez
E> A$="123456789": Rem Définir une chaîne de caractères For C=0 To Len(A$)-1 AD=Varptr(A$) : Rem Obtenir l'adresse V=Peek(AD+C) : Rem Obtenir la valeur Ascii de l'élément courant Poke AD+C,V+1 : Rem Ajouter 1 à cette valeur Next C Print A$
Quand vous reviendrez à l'Éditeur, vous découvrirez que votre listing a été modifié ! AMOS Professional essaie d'économiser de la place en stockant votre chaîne dans le listing du programme, plutôt que dans le "tampon" standard des variables. Ce problème peut être résolu en chargeant le premier caractère dans la chaîne, puis en ajoutant les caractères restants ensuite. Voici comment :
E> A$="1" : Rem Définir le premier caractère A$=A$+"23456789" : Rem Ajouter maintenant les caractères restants
Cela trompe AMOS Professional en créant une copie séparée de la chaîne dans le tampon de variables.
Les tableaux numériques sont stockés comme une simple liste de valeurs, avec chaque dimension stockée à la suite. Regardez le tableau suivant :
X> Dim TEST(3,3)
Ce tableau est stocké dans l'ordre suivant :
0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3
Ainsi, pour obtenir l'adresse de la première valeur du tableau, vous utiliseriez :
X> Varptr TEST(0,0)
Les tableaux de chaînes sont plus complexes, car leur longueur doit changer chaque fois que l'un de leurs éléments reçoit une nouvelle valeur. Le seul moyen de garantir une sécurité totale est de les éviter complètement ! Si vous ignorez ce conseil et essayez d'y accéder en utilisant VARPTR, vous prenez un risque réel.