[TUTO] Les Structures
Publié : dim. 06/juin/2004 10:30
ceci est un recapitulatif d'une discution qui a eu lieu sur les structures
un tuto !! je remerci les auteurs respectif au nom de toute l'humanité
pour nous avoir fait partagé leur immense savoir
voici:
Une structure, c'est ni plus, ni moins qu'une liste de variables qui peuvent être de différents types.
Code:
Info.RESULTAT : retourne l'adresse de la structure RESULTAT dans Info
Info\Octet = 2 : Tu donnes la valeur de 2 a la variable octet,
en appelant la structure grace à son adresse contenue dans Info
Nombre = Info\Octet : Tu récupères la valeur contenue dans la variable
Octet, en appelant la structure grace à son adresse contenue dans Info
C'est comme si tu appelais des variables.
Par contre, tu peux avoir une variable qui est liée à une autre structure.
Code:
a.l ; variable de type entier long
b.f ; variable de type flotant (nombre à virgule)
a.struct1
b.struct2
Ensuite, tu utilise a et b comme tu veux.
En fait, tu vois, tu avais tout compris. Le seul point dont tu ne parles pas, c'est comment utiliser ensuite ces variables. Petit exemple ?
Code:
Les structures sont particulièrement pratique quand tu dois créer un tableau de données. Le cas typique, c'est un tableau de points
Code:
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:
Code:[/quote]
*****************************************************************************************
Structure Union
voici ce qu'est une StructureUnion
c'est le regroupement L'UNION de plusieurs Champs a la meme adresse memoire :
les champs
Long.l ; Float.f ; String.s sont considérés comme un seul Champ !!! d'un point de vue Emplacement Memoire
un tuto !! je remerci les auteurs respectif au nom de toute l'humanité
pour nous avoir fait partagé leur immense savoir

voici:
Une structure, c'est ni plus, ni moins qu'une liste de variables qui peuvent être de différents types.
Code:
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
Mot_Long.l
Chaine.s
EndStructure
Info.RESULTAT
Info\Octet = 2 : Tu donnes la valeur de 2 a la variable octet,
en appelant la structure grace à son adresse contenue dans Info
Nombre = Info\Octet : Tu récupères la valeur contenue dans la variable
Octet, en appelant la structure grace à son adresse contenue dans Info
C'est comme si tu appelais des variables.
Par contre, tu peux avoir une variable qui est liée à une autre structure.
Code:
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
Mot_Long.l
Chaine.s
Valeur.AUTRESTRUCTURE <-- Variable liée à une autre structure
EndStructure
Info.RESULTAT
Tout juste ! Info, c'est le nom de la variable. Tu peux créer autant de variables que tu veux en les déclarant du type "Resultat". C'est exactement comme quand tu fais :et le "info" c'est arbitraire n'est-ce pas ?
t'aurai pu lui donner n'importe quel nom ?
a.l ; variable de type entier long
b.f ; variable de type flotant (nombre à virgule)
Oui, sauf que dans ce cas, on utilise pas le terme "affectation" mais "typage". L'affectation, c'est quand tu affecte (donne) une valeur à une variable (a=1). Le typage c'est quand tu décide de quelle sorte de variable il s'agit. (cela dit, on dit parfois "affectation de type" plutôt que "typage").est-ce le point entre les deux qui sert d'affectation ?
Oui, comme dit plus haut, une structure est une liste de variables. Chacune de ces variables peut avoir un type différent, y compris un type structure.et les structures peuvent t'elle renfermer des listes ou d'autre structures ??
C'est ça ! Comme on peut avoir besoin de créer différentes sortes de structures, il faut bien pouvoir leur donner un nom pour pouvoir les utiliser à tour de rôle :en fait si j'ai compris le terme "resultat"dans ton exemple n'est employé que pour la creation de la structure !
on l'affecte a une variable dans ce cas "info" et dorenavant on utilise que "info" on oublie "Resultat" ok ??
a.struct1
b.struct2
Ensuite, tu utilise a et b comme tu veux.
En fait, tu vois, tu avais tout compris. Le seul point dont tu ne parles pas, c'est comment utiliser ensuite ces variables. Petit exemple ?
Code:
Code : Tout sélectionner
;Création d'une structure :
Structure Struct1
e1.l
e2.l
EndStructure
;
; Typage d'une variable et affectation (les deux en même temps)
var.Struct1\e1 = 1 ; on aurait pu faire "var.Struct1" et à la ligne var\e1 = 1
; on complète l'affectation
var\e2 = 2 ; pas la peine de refaire var.Struct1\e2 = 2, le type de var
; a déjà été déclaré, maintenant, PurePasic sait que var est de type Struct1
debug var\e1 ; ça va afficher "1"
debug var\e2 ; ça va afficher "2"
Code:
Code : Tout sélectionner
Dim pt.point(100)
;Pas besoin de créer la structure "point", elle existe déjà (PureBasic ;pré-déclare tout un paquet de structures que tu peux voir avec "Structure Viewer").
;Dans cet exemple, pt est un tableau à deux dimensions de 100 points qui ;s'utilise comme suit :
pt(1)\x = 10
pt(1)\y = 25
pt(2)\x = 7
pt(2)\y = 8
ou, pour créer une courbe :
For ct = 1 to 100
pt(ct)\x = ct
pt(ct)\y = ct*ct
Next
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:
Code:
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
motlong.l
Chaine.s
EndStructure
Procedure MaProcedure(*result.resultat)
*Result\octet = #True
*Result\Mot = 1234
*Result\motlong = 12345678
*Result\Chaine = "Hello World !"
;ProcedureReturn @Result : du coup, plus besoin de retourner de valeur
EndProcedure
Procedure metlesouk()
a=7
b=9
c.f=0.1
d$="coucou"
EndProcedure
MaProcedure(@Valeur.RESULTAT)
metlesouk()
Debug Valeur\octet
Debug Valeur\Mot
Debug Valeur\motlong
Debug Valeur\Chaine
Voilà
*****************************************************************************************
Structure Union
voici ce qu'est une StructureUnion
c'est le regroupement L'UNION de plusieurs Champs a la meme adresse memoire :
Code : Tout sélectionner
Structure Type
Name$
StructureUnion
Long.l ; Chaque champ (Long, Float et String) est placé à la
Float.f ; meme adresse mémoire.
String.s ; UN SEUL ESPACE MEMOIRE POUR CES 3 CHAMPs
EndStructureUnion
EndStructure
; ce qui fait que
type.Type\Long.l =1
type.Type\Float.f =1 ; la on viens d'écraser ce qu'on avait attribué a \Long.l
; la preuve
Debug type.Type\Float.f ; c'est bon puisque c'est la dernière valeur entrée
Debug type.Type\Long.l ; ça affiche n'importe quoi parceque la valeur n'existe plus !! :)
Long.l ; Float.f ; String.s sont considérés comme un seul Champ !!! d'un point de vue Emplacement Memoire
