![]() |
Tipo de Estructura variable
Hola amigos... tengo una consulta con un codigo en Delphi (Cabe señalar que no se Delphi)
Type TMem_Register = Record Case Integer Of 1: (Check_Sum : WORD; ); 2: (Crc_move : Array[1..2] Of Byte; ); end; La siguiente declaración no se lo que hace: Parecería que declarara una estructura variable con la instrucción case Integer. lo que no entiendo es que lineas abajo la declaración es la siguiente: Temp_Ccitt : TMem_Register; Crc_Ccitt : TMem_Register; No veo que en ningun momento se establezca que tipo de variables tendrá la estructura Si algunos de ustedes me puede decir o interpretar este código me la hace llegar. Gracias de antemano.... |
Se trata de una estructura de tipo registro variable, es decir de acuerdo con la definición, el registro se compone de dos tipos de datos posibles pero solamente podrá almacenar uno de los 2,
un ejemplo siguiendo tu código: Código:
procedure TForm1.Button1Click(Sender: TObject); Un Saludo. |
Si el registro solo puede almacenar uno de los 2 tipo de datos posibles,
* Quiere decir que ya no lo puedo cambiar a otro tipo, osea si empiezo con tipo WORD solo me acepta WORD. * Si puedo cambiar de tipos: Al asignar un dato de tipo Array (por ejemplo si anteriormente habia un dato de tipo Word) ¿me va a reemplazar el dato ingresado anteriormente o me saldrá error?. Gracias por ayuda amigo |
No lo que quiere decir es cada vez que utilices una variable instanciada a partir de este registro, podrá contener cada vez solamente uno de los dos tipos de datos, pero no los dos a la vez, es una especie de sobrecarga.
Temp_Ccitt.Check_Sum:=5000; Temp_Ccitt.Crc_move[1]:=2; Al añadir el punto verás que puedes elegir uno de los tipos de dato. Un Saludo. |
¡Buen día a todos!
Complementando un poco lo que nos comenta Marcoszorrilla, agrego que este tipo de estructuras se conocen como registros con parte variante. Un registro con parte variante, consiste en una estructura Record, donde dos o más de sus campos ocupan el mismo espacio de memoria. Por lo tanto, al modificar el valor (contenido) de uno de estos campos, se estará modificando también el valor de los demás campos que compartan el mismo bloque de bytes. Debo aclarar que esto de la "parte variante" no tiene nada que ver con el tipo de dato "Variant". Por otra parte, el término sobrecarga se aplica más bien a los casos donde el compilador determina cuál de varias posibles opciones tomar. En el caso de los registros con parte variante, todas las opciones de la parte variante están disponibles siempre, aun en tiempo de ejecución. La finalidad de la parte variante de un registro, es permitir dos o más interpretaciones de un mismo dato, o bien facilitar el acceso de lectura/escritura a sólo una parte del bloque de bytes ocupado por otro campo. La estructura que se plantea: Código:
TMem_Register = Record Esto permite que una variable de tipo TMem_Register, pueda ser interpretada como un valor de tipo Word, o bien como un arreglo de dos Bytes. Se puede acceder a cualquiera de los campos de la parte variante en cualquier momento. Siempre están disponibles todos, no hay restricción de acceso. Pero debe tenerse presente que modificar uno de esos campos es modificar también aquellos que tengan por lo menos un byte en común con el primero. Espero esto sea de utilidad. Seguimos en contacto. Al González :). |
La franja horaria es GMT +2. Ahora son las 05:15:49. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi