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