FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
pasar un puntero a una funcion
ola a todos los compañeros del foro
esty aprendiendo a programar en delphi y a verdad no se como se pasa un puntero a una funcion. por otra parte si kiero asignar un puntero k apunta a un char al campo edit seria posible ¿?cual es el cambio que habra que hacer saludos gracias de antemano |
#2
|
||||
|
||||
declaras un tipo puntero a registro (por ejemplo) así:
tu función sería algo parecido a:
y la llamas de la siguiente forma usando @:
__________________
self.free; |
#3
|
|||
|
|||
Cita:
En la mayoria de los casos no necesitas trabajar con punteros, puedes usar referencias que viene a ser lo mismo pero sin necesidad de usar la sintaxis de los punteros por ejemplo: Código:
procedure prueba(var n:integer); begin n:= 35; end; En cuanto a punteros a strings, cadenas de caracteres, usando un typecast a PChar consigues un puntero al string (siempre que el string no sea una propiedad de un objeto). Código:
var s:string; // Ejemplo con punteros aunque seria preferible en lugar de usar un pchar usar una referencia, // de la siguiente forma: procedure rellena(var ptr:string, caracter:char) ; procedure rellena(ptr:PChar, caracter:char) ; begin while ptr^<>#0 do begin ptr^:= caracter; Inc(ptr); end{while}; end; begin s:= 'Hola mundo'; rellena( PChar(s) , 'x' ); ShowMessage(s); // Mostrara xxxxxxxxxxx end; Aun asi hay que tener muucho cuidado con el uso de punteros a strings, ya que los strings pueden cambiar dinamicamente de lugar, ademas delphi para ahorrar memoria usa el metodo de copy on write, para las cadenas de caracteres, lo que hace muy peligroso su uso, por ejemplo: Código:
var a,b:string; ptr:PChar; begin a:= 'hola'; // Esto te daria un acces violation bestial no se puede modificar // 'hola' porque esta guardada la zona de inicializacion // de constantes del programa y no es escribible ptr:= PChar(a); ptr^:= '*'; // En cambio lo siguiente funciona perfectamente, al usar la sintaxis normal // de delphi, el compilador se da cuenta de que queremos modificar // el string, y antes de asignar el caracter hace una copia del string // a una zona de memoria que si es escribible. a[1]:= '*'; // Y una vez hecho lo anterior ya funciona la sintaxis de punteros // porque el string ya esta en una zona de memoria escribible ptr:= PChar(a); ptr^:= '+'; // Pero cuidado con lo siguiente, atencion con la asignacion del puntero // estaremos modificando LOS DOS STRINGS, tanto "a" como "b". Ya // que al asignarlos apuntan a la misma zona de memoria y al usar // punteros el compilador no se da cuenta de que debe hacer una copia // de a, antes de modificarlo. b:= a; ptr:= PChar(a); ptr^:= 'X'; // En cambio lo siguiente funciona corrrectamente y la asignacion del puntero // solo modifica la variable "a", esto es debido a que la linea // a[1]:= 'q', ha obligado al compilador a realizar una copia del contenido // de "a" para que se encuentre en distinta zona de mmmoria que "b" // y se pueda modificar sin afectar al valor de "b" b:= a; a[1]:= 'q'; ptr:= PChar(a); ptr^:= 'X'; end; Saludos Última edición por Mick fecha: 21-05-2007 a las 13:16:43. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
puntero *pantalla en c++ | coletaun | Varios | 15 | 21-07-2006 14:46:04 |
puntero a imagen | Abaddon | Gráficos | 9 | 16-06-2005 00:17:29 |
Funcion para pasar de minutos a horas | Asshole | Varios | 1 | 13-06-2005 13:23:27 |
Enfocar un botón al pasar el puntero del ratón | David | OOP | 7 | 16-03-2005 00:25:36 |
Pasar como parametro el where en una funcion | cso2000 | MS SQL Server | 2 | 15-02-2005 02:49:47 |
|