2012-03-08 16 views
12

Tylko dla ciekawości,Jak zdefiniować Empty Char w Delphi

Dlaczego w Delphi, jeśli mamy zdefiniowane pusty char przez:

a:Char; 
a:=''; 

otrzymujemy błąd: niezgodne typy: 'char' i 'string'

jednak jeśli złożyliśmy

a:='a'; 

będzie dobrze?

Czy konieczne jest zdefiniowanie pustego znaku przez: a:=#0?

+1

W świecie .net można mieć "pustą" szarżę, ponieważ mają typy zerowalne (za pośrednictwem systemu generycznego). W świecie baz danych, pola bazy danych mogą być zerowalne, ale wszystkie typy Delphi 'Ordinal', w tym' Integer', 'Char',' Byte', i reszta, podczas gdy mogą one mieć wartość wartownika (flagę) lub zero (# 0) dla Char, na przykład, nie może być "pusty" lub "pusty". Ponieważ łańcuchy i tablice nie są typami porządkowymi, reguły są różne. Ciąg jest jak "dynamiczna tablica znaków". –

+1

Nie masz pewności co do '' '' stałej ekspresji. Jest typu 'string' i nie jest kompatybilny z typem' char'. Wręcz przeciwnie "a" jest zgodne. Więc ** masz ** na ** zdefiniowanie ** konwencji "pusty znak". – OnTheFly

Odpowiedz

22

Znak jest pojedynczą (to znaczy dokładnie jedną) postacią. Zatem "a", "∫" i "⌬" są w porządku, ale nie "ab" (łańcuch dwuznakowy), "Hello World!" (ciąg dwunastoznakowy) lub "(ciąg znaków zero).

Jednak znak NULL (# 0) to znak jak każdy inny.

Ponadto typ danych postaci jest zaimplementowany jako słowo (we współczesnych wersjach Delphi), czyli jako dwa bajty. Jeśli wszystkie wartości 0, 1, ..., 2^16 - 1 są używane dla prawdziwych postaci, jak na świecie reprezentowałbyś swój "pusty znak"?

+2

+1 dla "(zero znaków). Przekonało mnie to !! – Zeina

+3

@Zeina nie zapomnij przyjąć odpowiedzi ... – ComputerSaysNo

+0

z prawej strony z ostatnio edytowaną frazą, miałem na myśli pusty char znak null, ale myślałem, że po umieszczeniu: = '', kompilator potraktuje to jako Domyślnie # 0 i nie spodziewał się takiego błędu, więc chciałem wiedzieć, dlaczego tak jest. Z góry dziękuję! – Zeina

17

Nie ma czegoś takiego jak pusty char. A char musi mieć wartość. Jest to typ porządkowy, prosty typ wartości. Podobnie jak liczba całkowita, powiedzmy, zawsze ma wartość, podobnie jak char.

Wartość #0 nie jest pusta char, jest to znak o wartości 0, powszechnie znany jako NUL.

+2

W języku Pascal jest to typ "porządkowy". – OnTheFly