这是我用来定义数组的代码:
int characters[126];
接下来我想记录我使用这种格式的while循环记录的所有字符的频率:
while((a=getchar())!=EOF){
characters[a]=characters[a]+1;
}
然后使用 for 循环打印数组中整数的值。
这是如何工作的?
C 是否为字母分配了特定的数字,即。数组中的 a、b、c 等?
当我们在 C 中使用字符而不是整数来定义数组时会发生什么?
让我们确定我们很清楚:您正在使用getchar()
作为索引返回的整数值到您的数组中。这不是定义数组,它只是访问其元素。
C 是否为字母分配了特定的数字,即。数组中的 a、b、c 等?
数组中没有字母。有int
s。但是,是的,读取的字符getchar()
被编码为整数值,因此它们原则上是合适的数组索引。因此,这条线...
characters[a]=characters[a]+1;
... 读取int
然后存储a
在 array索引处的值characters
,将其加 1,然后将结果分配回a
数组的元素,前提是的值a
是数组的有效索引。
更一般地说,重要的是要了解尽管它的主要用途之一是表示字符,但 typechar
是整数类型。它的值是数字。从字符到数字的映射取决于实现和上下文,但是映射与 ASCII 代码一致是很常见的,您经常会看到假设这种映射的程序。
实际上,您的代码通过仅允许小于 126 的字符代码来做出这样的假设(和其他假设)。
您还应该注意,如果您的characters
数组是在函数内声明的,则它不会被初始化。该代码取决于所有元素最初为零。我会推荐这个声明:
int characters[UCHAR_MAX + 1] = {0};
该上限足以满足EOF
返回的所有非值getchar()
,并且无论数组在哪里声明,显式零初始化都将确保所需的初始值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句