JoséQuintas escreveu:Isso de usar inteiro foi removido do Harbour 3.4 por ser considerado perigoso, mas não sei detalhes técnicos sobre isso.
Me parece que o ponteiro é equivalente a variável passada por referência.
Los punteros son un tipo de variable especial que apuntan a una dirección de memoria determinada.
En el comentario del código en Hb dice que es inseguro porque al usar enteros se puede pasar un número ( dirección de memoria ) arbitrario a una función y trabar la maquina, lo cual es cierto si uno es descuidado y le asigna cualquier valor. Internamente Windows utiliza enteros para manejar el valor de los handles.
Pero el mayor peligro en usar enteros en vez de punteros es el incremento y decremento en las direcciones de memoria, porque los punteros tienen un tipo (ej. int, char, double, una estructura, una función, etc) y el tipo le da el offset del desplazamiento en la aritmética de punteros, ej. un int tiene 32 bits (4 bytes ) y un puntero a un int tendrá un desplazamiento de 4 bytes, por ej si p apunta a la dirección 100, entonces
p + 1 apuntará a la dirección 104.
En cambio si trabajamos con enteros en vez de punteros la dirección p+1 será siempre 101, por lo tanto hay que tener mucho cuidado, lo correcto serÃa:
p + size * incremento
Donde size es el tamaño en bytes del tipo de puntero, ej. 8 bytes en un double, 1 en char, 4 en los handles de Windows, etc.