2012-03-08 29 views
12

Sólo por curiosidad,¿Cómo definir vacío Char en Delphi

¿Por qué en Delphi, si definimos un carbón vacía por:

a:Char; 
a:=''; 

obtenemos un error: tipos incompatibles: 'Char' y 'cadena'

Sin embargo, si colocamos

a:='a'; 

¿estará bien?

¿Es necesario definir un carácter vacío por: a:=#0?

+1

En el mundo .net, podría tener un Char "vacío" porque tienen tipos Nullable (a través de su sistema de genéricos). Y en el mundo de la base de datos, los campos de base de datos pueden ser Nullable, pero todos los tipos 'Ordinales' Delphi, incluyendo' Entero', 'Char',' Byte', y el resto, mientras que pueden tener algún centinela (bandera) o valores cero (# 0) para Char, por ejemplo, no puede ser "vacío" o "nulo". Como las cadenas y matrices no son tipos ordinales, las reglas son diferentes. Una cadena es como una "matriz dinámica de caracteres". –

+1

Está confundido acerca de la expresión constante ''''. Es del tipo 'string' y no es compatible con el tipo' char'. En sentido contrario, "a" es compatible. Entonces, ** tienes ** para ** definir ** convención de "char vacío". – OnTheFly

Respuesta

22

Una char es un carácter único (es decir, exactamente uno). Así que 'a', '∫' y '⌬' están bien, pero no 'ab' (una cadena de dos caracteres), '¡Hola mundo!' (una cadena de doce caracteres), o '' (una cadena de cero caracteres).

Sin embargo, el carácter NULL (# 0) es un carácter como cualquier otro.

Además, el tipo de datos de caracteres se implementa como una palabra (en las versiones modernas de Delphi), es decir, como dos bytes. Si todos estos valores 0, 1, ..., 2^16 - 1 se usan para caracteres reales, ¿cómo representaría en el mundo su "char vacío"?

+2

+1 para '' (cero caracteres). ¡Me convenció! – Zeina

+3

@Zeina no se olvide de aceptar las respuestas ... – ComputerSaysNo

+0

su derecha con la última frase editada, quise decir con un carácter vacío, un carácter nulo, pero pensé que cuando coloque un: = '', el compilador lo tomará como # 0 por defecto, y no esperaba ese error, así que quería saber por qué es eso. ¡Gracias por adelantado! – Zeina

17

No existe un char vacío. Un char tiene que tener un valor. Es un tipo ordinal, un tipo de valor simple. Del mismo modo que un entero, por ejemplo, siempre tiene un valor, también lo hace un char.

El valor #0 no es un char vacío, es el carácter con el valor 0, comúnmente conocido como NUL.

+2

En Pascal, ese es el tipo 'ordinal'. – OnTheFly