我试图理解这是如何工作的(我知道它的作用,我只是不明白如何).据我所知,这会读取一个字符,直到达到EOF,如果它是一个数字,则把它放在数组中:
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
Run Code Online (Sandbox Code Playgroud)
我知道我可以像这样索引一个数组:
some_array[1] = 12;
Run Code Online (Sandbox Code Playgroud)
这将把12放在第二个元素中.
怎么c-'0'办?
(我从K&R的C编程语言第2版这本书中得到了这个)
'0'是char强制转换为整数时的十进制值为48.它的工作原理是因为char是内置的序数类型.
如果你看一下反汇编,你可以看到这个:
if (c >= '0' && c <= '9')
004135E3 movsx eax,byte ptr [ebp-9]
004135E7 cmp eax,30h
004135EA jl wmain+6Eh (41360Eh)
004135EC movsx eax,byte ptr [ebp-9]
004135F0 cmp eax,39h
004135F3 jg wmain+6Eh (41360Eh)
Run Code Online (Sandbox Code Playgroud)
请注意,我们将比较30十六进制和39十六进制,而不是'0'和'9'.
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |