comtois a écrit :@Dräc, j'ai intégré ton texte sur les pointeurs, si tu pouvais reprendre cette partie aussi , ça serait bien , ça permettrait de rester dans l'esprit de ce que tu as fait

Oui, tu as raison, j’ai commencé, je veux bien continuer cette page.
Cependant, vu qu’il s’agit de la Doc officielle, je suis un peu préoccupé par deux points :
- Est-ce que Fred a validé mes digressions sur ce thème? (entre autre

)
- Ne risque t’on pas d’avoir une doc Française différente de celle plus officielle Anglaise?
Parce que là, on commence sèrieusement à dériver de la simple correction…
Bon ! Sinon, revenons à nos moutons :
Vous le savez, le pointeur est une notion fondamentale mais délicate au début.
D’autre part, les chaînes sont des variables gérées différemment des autres.
Aussi comprendre la combinaison des pointeurs et des chaînes de caractères est loin d’etre immédiat.
Cela nécessite un minimum d’explications et je vous soumets donc la proposition suivante :
Pointeurs et chaînes de caractères
Toutes les variables ont une taille fixe en mémoire (1 octet pour un Byte, 4 octets pour un Long, etc…) sauf les chaînes de caractères dont la longueur peut changer.
N’ayant donc pas de longueur fixe, l’espace mémoire alloué à une chaîne de caractères varie.
C’est pour cette raison qu’à l’intérieur des structures, les chaînes de caractères sont gérées différemment des autres variables.
En effet, lors de la compilation, le compilateur ne connaît pas la taille des chaînes de caractères qui seront utilisées.
C’est pour cela que les champs d’une structure faisant référence à une chaîne de caractères se contentent de ne stocker que l’adresse mémoire où réside la chaîne de caractères et non la chaîne elle-même.
Donc les champs d’une structure faisant référence à une chaîne de caractères sont en fait des pointeurs vers des chaînes de caractères.
C’est pour cela, entre autre, que SizeOf(String) retourne une taille de 4 octets pour une compilation 32 bits.
Aussi l’écriture suivante est incorrecte:
Code : Tout sélectionner
Texte$ = "Bonjour"
*Pointeur.String = @Texte$
Debug *Pointeur\s
car *Pointeur\s cherche à lire la chaîne de caractères qui réside à l’adresse écrite en *Pointeur.
Or cette adresse n’existe pas car *Pointeur pointe la chaîne de caractères et non une zone mémoire contenant une adresse!
Pour bien faire ici, il faut pouvoir donner au champ \s de la structure String, l’adresse de la chaîne de caractères.
Exemple :
Code : Tout sélectionner
Texte$ = "Bonjour"
*Texte = @Texte$ ;*Texte a pour valeur l’adresse où réside la chaîne de caractères en mémoire
*Pointeur.String = @*Texte
Debug *Pointeur\s
[Fin de mon exposé]
4 remarques, si vous me le permettez :
1- Je ne suis pas d’accord avec l’intro actuelle sur les pointeurs : elle dit qu’un pointer est une variable de type Long, ce qui est faux !
Pourquoi ne pas reprendre, par exemple, ce que j’avais proposé la derniere fois ? A savoir :
L'utilisation des pointeurs est possible en plaçant une * devant le nom d’une variable.
Une telle variable est de type pointeur ou plus simplement un pointeur.
Un pointeur est une variable dont la valeur contient une adresse mémoire.
Un pointeur est généralement associé avec une structure.
2- Justement pour éviter certaines maladresses de codage, je pense qu’il serait judicieux d’indiquer à l’utilisateur qu’à chaque fois que l’on veut stoker une adresse, il faut le faire avec un pointeur meme si, sur un processeur 32 bits, un long peut contenir une adresse.
Si tel n’est pas le cas, le jour ou l’on compile en 64bits, ca risque de ne marcher et l’utilisateur risque lui de passer du temps à trouver le pb…
Je propose donc la phrase suivante que je verrais bien placée juste après celle mentionnant que PureBasic ne permet pas encore de créer des exécutables 64 bits :
A chaque fois qu’une adresse mémoire doit être stockée, il faut le faire par l’intermédiaire d’un pointeur. Ceci garanti (le jour où PureBasic permettra aussi une compilation 64bits), que l’adresse sera correctement représentée lors de la compilation du code que ce soit par un processeur 32 bits comme par un processeur 64 bits par exemple.
3- Maintenant qu’il y a l’explication sur les chaînes de caractères, il faut mettre au pluriel le sous titre:
Notion
s sur les pointeurs en PureBasic
4- De même, il me semble qu’il serait plus claire de mettre des sous-sous titre (vous me suivez ?)
Par exemple :
- Pointeurs et taille mémoire
Pointeurs et structures
Pointeurs et chaînes de caractères
5- Enfin, dans le premier exemple donné pour les structures, peut-on permuter Nom et Prenom, svp? (non parce que là, j’en dors pas la nuit)
Code : Tout sélectionner
MesAmis(0)\Nom = "Durand"
MesAmis(0)\Prenom = "Michel"
MesAmis(0)\Age = 32