C 编程 - 整数和字符

标签 c integer ascii

这是我从一本关于 C 编程的电子书中摘下来的。

Source

我知道字符“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/

相关文章:

c++ - 可变参数列表程序行为异常 - cstdarg

python - 在Python中将字符串列表转换为整数,跳过屏蔽术语

c - 从 char 变量中获取数字字符串并将其重新分配给整数变量

c++ - 在控制台中打印一个填充的正方形

unicode - Unicode 和 Ascii 字符相同吗?

c - 在 C 中实现有限状态机

c - gtk_init 改变了 sprintf 的功能

c - 在 C 中声明数组大小

Python:只返回整数

c - 为什么 C 编译器在为有符号类型分配过高的整数值时不发出警告?