2014-07-10 60 views
1

我已經繼承了下面的代碼,並想知道更多關於索引使用。奇數C++字符數組引用

... 
char cpChMap[256]; 
memset(cpChMap, 0xff, 256); 
for (i = 0; i < 10; i++) 
    cpChMap['0' + i] = 0; 
... 

我以前從未見過[cpChMap[<character expression>]]用於索引和數組一個字符,可有人解釋這是如何工作或提供一個明確的參考,因爲我似乎無法找到一個像樣的參考,我一直在尋找一段時間。

謝謝你的時間。

+3

[ '0'= 48](http://www.asciitable.com/) 。 – jliv902

+0

哦,現在這是一個有用的鏈接,在那裏......乾杯! – MoonKnight

+0

['0'+ n](http://stackoverflow.com/questions/1114741/how-to-convert-int-to-char-c)和[n-'0'](http:// stackoverflow。 com/questions/5029840/convert-char-to-int-in-c-and-c)通常用於將int類型轉換爲char類型,將char類型轉換爲int類型。 – Joe

回答

4

char是一個整數類型。他們可以在算術表達式中使用:

std::cout << '0' + 7 << std::endl; 

'0'通過'9'是連續的事實意味着'0' + 7'7'相同的值,這就是爲什麼在循環:

for (i = 0; i < 10; i++) 
    cpChMap['0' + i] = 0; 

cpChMap使用指數'0' (與48相同,假設ASCII)到'9'

+1

*連續意味着* - 我相信你正在尋找連續的詞。 – Joe

+1

@Joe是的,英語不是我的母語,有時候這些詞的差別讓我困惑。 –

+0

感謝您的時間,這是最讚賞.. – MoonKnight

1

char也是一個int8類型。 (8位大小的整數= 1字節)

每個字符與它的ASCII值相等。

它不回答這個問題,但我不明白爲什麼他們不這樣做:

char cpChMap[256]; 
memset(cpChMap, 0xff, 256); 
memset(&cpChMap['0'], 0, 10); 
+0

公平點。我也不知道。在我看來,這段代碼充滿了糟糕的代碼,完整的重寫會很好,但會太貴了!感謝您的回答... – MoonKnight

+1

char僅在ASCII系統上等於其ASCII值。某些假設可能不適用於其他假設:'0'== 48或'S' - 'R'== 1等等。 –

+1

通常如此,但是有些字節的平臺(即最小*獨立尋址*存儲單元)是32位。 'char'總是有一個字節的大小;因此在這樣的平臺上'char'是32位的。 – ach