un pointeur est un "symbole" à part entière qui commence par '*'. A part entière parce que "variable" est différent de "*variable".
un pointeur, c'est une variable qui contient une adresse. l'adresse d'une autre variable, d'un tableau ou d'une zone quelconque de mémoire.
pour obtenir une adresse il y a plusieurs moyens, le premier est d'utiliser le symbole '@' (fonctionne dans tous les cas de figure). Le second est spécifique aux tableaux. Et enfin certaines fonctions comme AllocateMemory retournent une adresse.
les types de base ne permettent pas de manipuler directement un pointeur. il faut passer par les fonctions peek/poke ce qui rend le principe de pointeur inutile (une variable de type "l" fait l'affaire)
pour profiter pleinement des pointeurs il faut donc passer par des structures. c'est d'ailleurs pour ca qu'il existe des structures pour les types de base (Long pour pointer sur des .l, Float pour des .f etc).
dans une structure il est possible d'avoir un tableau "statique" grace aux symboles "[" et "]" (par exemple Bidule.b[32] représentera 32 octets dans la structure).
le compilateur permet de pointer vers un tableau de taille inconnu si la taille est [0]. si ce n'est pas un pointeur, [0] équivaut à [1].
petit code pour résumer tout ce qui a été dit plus haut:
Code : Tout sélectionner
Structure Truc
Machin.l
Bidule.b[2]
EndStructure
Structure Trucs ;obligé de passer par une structure pour
Trucs.Truc[0] ;un tableau (taille inconnue) de Truc
EndStructure
Dim tableau.Truc(3)
;rempli et affiche le tableau
For t = 0 To 3
tableau(t)\Machin = Random(1000)
tableau(t)\Bidule[0] = Random(255)
tableau(t)\Bidule[1] = Random(255)
Debug tableau(t)\Machin
Debug tableau(t)\Bidule[0]
Debug tableau(t)\Bidule[1]
Next t
;petit repère visuel
Debug "---"
;pointe vers le tableau
*pointeur.Trucs ;le pointeur est dans la structure...
*pointeur = tableau() ;recoit l'adresse du tableau
;affiche le tableau via le pointeur
For t = 0 To 3
Debug *pointeur\Trucs[t]\Machin
Debug *pointeur\Trucs[t]\Bidule[0]
Debug *pointeur\Trucs[t]\Bidule[1]
Next tExemple concret:
Si je ne passe pas par une structure temporaire voila ce qui se passe
Code : Tout sélectionner
Structure pLong5
*dword.Long[5] ;ce n'est pas un pointeur vers un tableau de Long
EndStructure
;un pointeur c'est comme un long
;la structure contient 5 longs donc 5 pointeurs
Debug SizeOf(pLong5) / SizeOf(Long)Code : Tout sélectionner
*pointeur.type[0] ;pointeur qui pointe vers un tableau de type
*pointeur[0].type ;tableau de pointeurs qui pointent vers une variable type
*pointeur[0].type[0] ;tableau de pointeurs qui pointent vers un tableau de typeDri