2012-03-08 31 views
12

只是出於好奇定義空字符,如何在Delphi

爲什麼在Delphi中,如果我們通過定義一個空字符:

a:Char; 
a:=''; 

我們得到一個錯誤:不兼容的類型:「字符」和'串'

但是,如果我們把

a:='a'; 

沒事的?

是否需要定義一個空字符:a:=#0

+1

在.net世界中,你可以有一個「空」Char,因爲他們有Nullable類型(通過它們的泛型系統)。在數據庫世界中,數據庫字段可以是Nullable,但是所有的Delphi'Ordinal'類型,包括'Integer','Char','Byte'等等,它們可能有一些標記(標記)或零值例如,Char的#0)不能爲「空」或「空」。由於字符串和數組不是序數類型,因此規則是不同的。一個字符串就像一個「動態字符數組」。 – 2012-03-08 14:13:29

+1

你對「常量表達式」感到困惑。它的類型是'string',與'char'類型不兼容。相反''a''是兼容的。所以,你**有**來定義**「空字符」約定。 – OnTheFly 2012-03-08 14:29:46

回答

22

char是單個字符(也就是一個字符)。所以'a','∫'和'⌬'都可以,但不是'ab'(兩個字符的字符串),'Hello World!' (十二個字符的字符串)或''(一個零字符的字符串)。

但是,NULL字符(#0)是任何其他字符。

此外,字符數據類型被實現爲一個字(在Delphi的現代版本中),也就是兩個字節。如果所有這些值爲0,1,...,2^16 - 1都用於真實角色,那麼您將如何在世界中代表您的'空白字符'?

+2

+1('零字符)。它說服了我! – Zeina 2012-03-08 13:49:31

+3

@Zeina不要忘記接受答案... – ComputerSaysNo 2012-03-08 13:52:10

+0

你的權利與最後編輯的短語,我的意思是空字符空字符,但我認爲,當我放置:='',編譯器會把它作爲#0默認情況下,並沒有期望這樣的錯誤,所以我想知道爲什麼是這樣的。提前致謝! – Zeina 2012-03-08 13:54:07

17

沒有空的char這樣的東西。 A char必須具有價值。它是一種序數類型,簡單的數值類型。就像一個整數一樣,總是有一個值,char也是如此。

#0不是空的char,它是值爲0的字符,俗稱NUL

+2

在帕斯卡這是'序數'類型。 – OnTheFly 2012-03-08 14:21:35