nico a écrit :Manifestement, pour moi, tu as une incompréhension sur l'utilisation des pointeurs et ne voit aucun mal dans mes propos; moi-même je m'y perd aussi comme le montre un de mes derniers posts.
D'abord je reprend ton premier exemple.
Il faut savoir avant d'utiliser un pointeur qu'il faut l'initialiser. C'est à dire lui assigner une adresse afin de pouvoir lire ou écrire dans cette adresse.
Cette adresse pouvant être l'adresse d'une structure,d'une varible,d'un tableau etc....
Peut que j'ai une incompréhension
Sur la dernière phrase tu as raison, c'est un mauvais exemple, un très mauvais.
Je n'utilise d'ailleurs pas les pointeurs comme les exemples que j'ai écrits (voir le code que j'ai posté sur la lecture des residents), car ces exemples sont à mon sens ambigües mais parfaitement fonctionnels.
Dans plusieurs langages, les pointeurs ont obligatoirement un type, ce qui évite les erreurs; c'est le cas du turbopascal (si je me souvient bien), du C, C++. En TurboPascal, il existe un type de pointeur "sans type" qui permet de "jongler" avec des types de pointeurs différents, peut-être est-ce le cas en C, C++ mais je ne connais pas assez ces langages.
Il est donc parfaitement normal de pouvoir utiliser des pointeurs en PB avec un type comme s, l, w, ça ne me choque pas.
Dans Mon esprit, la syntaxe suivante est correcte
*var.s
ou le pointeur pointe sur une donnée de type chaine dont la longueur est inconnue.
L'instruction suivante donne le bon résultat
et regarde le code suivant, il fonctionne également
raison pour laquelle je pense qu'un pointeur doit avoir un type et il doit y avoir un type de pointeur "sans type" afin de pouvoir jongler avec les données.
Dans
Debug PeekS(*Pt) *pt est considéré comme une adresse (même si le type est s) car le résultat est correct, le type pointeur de chaine est donc valide.
Dans
Debug *Pt.s *pt est considéré comme une chaine bien que soit une pointeur mais PB interprete comme une chaine puisque le type est une chaine alors que juste avant il est considéré comme une adresse (ambigüe tout ça, on devrait plutot avoir l'adresse).
Cette écriture sans type
*pt
correspond à ça
*pt.l
car Deftype intervient également sur le type des pointeurs (là encore, PB permet de déclarer un pointeur ayant un type).
Si on supprime le deftype, ça ne compile plus à la 2eme ligne.
Ce débat permet de soulever des points obscurs sur comment les pointeurs sont gérés en PB.
Je continue à penser que les pointeurs doivent avoir un type et que l'on doit pouvoir définir un pointeur "sans type"
Si on regarde le code asm (je suis toujours curieux) le code généré pour un pointeur avec un type défini comme par exemple *pt.s, cela correspond bien à une variable de type pointeur utilisé par PB.
Sinon, Nico, je ne prend pas mal tes remarques, au contraire

, ça oblige à la réflexion; comme je l'ai dit à Dobro dans un post, il faut limiter l'utilisation des pointeurs car c'est source d'erreurs
et puis moi je comprend vite mais faut expliquer longtemps
