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