2012-03-08 13 views
12

Solo per curiosità,Come definire vuoto Char a Delfi

Perché in Delphi, se abbiamo definito un char vuota:

a:Char; 
a:=''; 

otteniamo un errore: tipi incompatibili: 'Char' e 'stringa'

Tuttavia, se abbiamo messo

a:='a'; 

andrà bene?

E 'necessario definire un carattere vuoto di: a:=#0?

+1

Nel mondo .net, potresti avere un Char "vuoto" perché hanno tipi Nullable (tramite il loro sistema generico). E nel mondo del database, i campi del database possono essere Nullable, ma tutti i tipi 'Ordinal' di Delphi, inclusi' Integer', 'Char',' Byte', e il resto, mentre potrebbero avere dei valori sentinella (flag) o zero (# 0) per Char, ad esempio, non può essere "vuoto" o "nulla". Poiché le stringhe e gli array non sono tipi ordinali, le regole sono diverse. Una stringa è come una "matrice dinamica di caratteri". –

+1

Sei confuso circa l'espressione costante '''. È di tipo 'stringa' e non compatibile con il tipo' char'. Al contrario, ''a'' è compatibile. Quindi ** devi ** definire ** la convenzione "empty char". – OnTheFly

risposta

22

Un carattere è un singolo (vale a dire esattamente uno) carattere. Quindi 'a', '∫' e '⌬' sono tutti OK, ma non 'ab' (una stringa di due caratteri), 'Hello World!' (una stringa di dodici caratteri) o '' (una stringa di caratteri zero).

Tuttavia, il carattere NULL (# 0) è un carattere come un altro.

Inoltre, il tipo di carattere è implementato come una parola (nelle versioni moderne di Delphi), vale a dire due byte. Se tutti questi valori 0, 1, ..., 2^16 - 1 sono usati per i personaggi reali, in che modo nel mondo rappresenteresti il ​​tuo "carattere vuoto"?

+2

+1 per '' (caratteri zero). Mi ha convinto !! – Zeina

+3

@Zeina non dimenticare di accettare le risposte ... – ComputerSaysNo

+0

ur proprio con l'ultima frase modificata, intendevo per carattere vuoto un carattere null, ma ho pensato che quando ho posto a: = '', il compilatore lo prenderà come # 0 per impostazione predefinita e non si aspettava tale errore, quindi volevo sapere perché è così. Grazie in anticipo! – Zeina

17

Non esiste uno spazio vuoto char. A char deve avere un valore. È un tipo ordinale, un tipo di valore semplice. Proprio come un intero, diciamo, ha sempre un valore, così fa un char.

Il valore #0 non è un char vuoto, è il carattere con valore 0, comunemente noto come NUL.

+2

In Pascal questo è il tipo 'ordinale'. – OnTheFly