簡體   English   中英

數組K&R 1.6個字符?

[英]Arrays K&R 1.6 chars?

在K&R第二版的第23頁上,有一些代碼

    if (c >= '0' && c <= '9')
       ++ndigit[c-'0'];

繼續 我的問題是,為什么整數的兩邊都有'? 什么是c-'0'?

'0'是一個字符。 它具有整數值48 '9'具有值57的值c - '0'等於c - 48 ,並且將對應的字符的整數值。 '0'將是0'1'將是1 ,依此類推。

'0'是一個char ,即一個字符。 每個字符在內部都由整數表示。 參見ASCII 例如, '0'的整數值為48

該代碼的目的是將字符 '0'...'9'轉換為相應的數值0...9 C 保證代表的小數位的字符有什么特別的價值,但它確實保證它們是連續的,並以正確的順序。 上面的減法將始終為您提供正確的整數值。

C中的任何其他字符都沒有類似的保證。

參考

ISO 9899:1999標准(aka C99)表示:

執行字符集成員的值是實現定義的。 ...

基本執行字符集中應存在一個所有比特都設置為0的字節,稱為空字符。 它用於終止字符串。 ...

上面十進制數字列表中的0后面的每個字符的值應比前一個的值大一個。

N1570中使用的措辭完全相同 ,這是當前標准(C11)的最終公開草案。

關於字符的值或字符之間的關系,沒有多說。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM