BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


7. INTRODUCCIÓN A LOS PUNTEROS Y VARIABLES DINÁMICAS.
7.10. PUNTEROS COMO PARÁMETROS.
7. INTRODUCCIÓN A LOS PUNTEROS Y VARIABLES DINÁMICAS.
7.10. PUNTEROS COMO PARÁMETROS.
7. INTRODUCCIÓN A LOS PUNTEROS Y VARIABLES DINÁMICAS.
7.10. PUNTEROS COMO PARÁMETROS.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ 1. Punteros como parámetros.

Cuando un tipo de dato pointer o un puntero con tipo, se usa como parámetro de una función o procedimiento, lo que se pasa a esa función o procedimiento es una dirección de memoria. Es decir si un puntero se pasa como VAR, la dirección de memoria del puntero se podrá modificar y también se podrá modificar el valor de la variable a la que apunta, pero si se pasa sin VAR entonces la dirección de memoria del puntero no se podrá modificar pero si podrá modificar el valor de la variable a la que apunta. El siguiente ejemplo muestra esa situación.


Descargar
{$codepage utf8}
Procedure CambiandoValores(P1:pointer;Var P2:pointer);
 Begin
   integer(P1^):=5;
   integer(P2^):=5;
 End;

Procedure CambiandoPunteros(Var P1,P2:pointer);
 Var aux:pointer;
 Begin
   aux:=P1;
   P1:=P2;
   P2:=aux;
 End;

Var A,B:pointer;

Begin
  getmem(A,2);
  integer(A^):=2;
  getmem(B,2);
  integer(B^):=2;
  CambiandoValores(A,B);
  Writeln(integer(A^));
  Writeln(integer(B^));
  integer(A^):=3;
  integer(B^):=5;
  CambiandoPunteros(A,B);
  Writeln(integer(A^));
  Writeln(integer(B^))
End.
Código fuente 37: Ejemplo del uso de punteros como parámetros.
Descargar

El procedimiento CambiandoValores, cambiará los valores de las variables a las que apunta el puntero sin importar si se usa VAR o no, y CambiandoPunteros en este ejemplo intercambiará las direcciones de los punteros, ya que se esta usando VAR para ese propósito. Esta situación también se aplica a los punteros con tipo, pero no es el caso de los tipos de datos AnsiString y UnicodeString, que se comportarán como la variable estática string.

Hay que tener presente que un parámetro de arreglos abiertos, no es lo mismo que los arreglos dinámicos, el primero se usa generalmente con arreglos estáticos aunque se pueden pasar arreglos dinámicos en un parámetro de arreglos abiertos, pero esto no permite usar setlength dentro de la rutina para crear un arreglo dinámico.

El siguiente ejemplo muestra como usar los arreglos dinámicos como parámetros, para una rutina que lo necesite:


Descargar
{$codepage utf8}

Type
 TLEnteros=array of integer;
 
Procedure Crear(Var lista:TLEnteros;n:integer);
 Begin
   setlength(lista,n); 
 End;


Procedure mostrar(lista:array of integer);
Var i:longint;
Begin  
  for i:=0 to High(lista) do
   Begin
     Writeln(lista[i])
   End;
End;

Var MiLista:array of integer;
Begin 
 Crear(MiLista,4);
 FillWord(MiLista[0],4,3); 
 Mostrar(MiLista) 
End.
Código fuente 38: Arreglos dinámicos como parámetros.
Descargar

Cómo se puede observar, se crea un tipo de dato de un arreglo dinámico, para poder usarlo en el procedimiento Crear, de esa manera se podrá pasar el puntero para que crear el arreglo dinámico con setlength, es importante usar VAR, para que la dirección de memoria que tendrá el puntero del nuevo arreglo dinámico sea devuelto por el procedimiento.


Última revisión: 10/12/2013.



SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.