Page 1 sur 1

y'a un truc qui ne va pas avec les pointeurs

Publié : mar. 14/mars/2006 19:29
par Dr. Dri
Pour commencer, je vais essayer de récapituler ce qui est faisable avec les pointeurs

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 t
Alors je suis d'accord ca fonctionne très bien. Mais y'a comme un petit problème. Pour pointer vers un tableau d'une structure quelconque je dois passer par une structure supplémentaire.

Exemple 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)
Pour moi y'a un problème de syntaxe. Telle qu'elle est fichue elle est trop restrictive. variable[taille].type devrait désigner plusieurs variables du type "type" dans la structure. Et avec les pointeurs ca permettrait de faire ceci:

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 type
votre avis ?

Dri :?:

Publié : mer. 15/mars/2006 1:29
par poshu
j'aime bien l'idée du tableau de pointeur comme tu l'as écrit. Je vote pour.

Publié : mer. 15/mars/2006 18:18
par nico
Oui ça manque!

Publié : mer. 15/mars/2006 18:21
par lionel_om
Ca risque de devenir prise de tête aussi...
Mais c'ets pas grave, le cachet d'aspirine tout prêt et hop, c'est partit... :lol: