这是我从一本关于 C 编程的电子书中摘下来的。
我知道字符“0”和“9”的 ASCII 表示是整数,因此我了解与整数数组的兼容性。我只是不确定显示的输出是如何计算的?输入的是代码本身。
这句话是什么意思?
++ndigit[c-'0'];
那么,程序本质上是检查输入是否是 ASCII 代码表的前 10 个部分之一? ASCII CODE
最佳答案
不,事实并非如此。
c - '0'
从 c
的字符代码中减去字符 0
的字符代码(不一定是 ASCII)。如果 c
是数字,这将产生 0 到 9 之间的数字。然后,使用 []
运算符和前缀增量运算符 (++
) 然后用于增加该特定索引处的元素。
顺便说一句,代码有多个地方错误。我建议您转向另一本书,因为这本书似乎已经过时和/或鼓励使用几种不良的编程实践。
首先,main()
没有返回类型,这是一个错误。它需要声明为 int main()
或 int main(void)
或 int main(int, char **)
。较旧的编译器有一个坏习惯,即如果省略则假定隐式 int
返回类型,但现在已弃用此行为。
其次,最好初始化 ndigit
数组,如下所示:
int ndigit[10] = { 0 };
for循环是多余的,因为我们可以进行初始化;它的可读性也比初始化语法差,而且也很危险:作者没有使用 sizeof(ndigits)/sizeof(ndigits[0])
来计算数组的计数,但他硬编码了它length,当数组长度改变(减少)并且for循环中硬编码的长度值被忘记时,可能会导致缓冲区溢出。
关于C 编程 - 整数和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533649/