当我们在 C 中使用字符而不是整数来定义数组时会发生什么?

尼克特斯坦博士

这是我用来定义数组的代码:

int characters[126];

接下来我想记录我使用这种格式的while循环记录的所有字符的频率:

while((a=getchar())!=EOF){
    characters[a]=characters[a]+1;
}

然后使用 for 循环打印数组中整数的值。

这是如何工作的?

C 是否为字母分配了特定的数字,即。数组中的 a、b、c 等?

约翰·博林格

当我们在 C 中使用字符而不是整数来定义数组时会发生什么?

让我们确定我们很清楚:您正在使用getchar()作为索引返回的整数值到您的数组中。这不是定义数组,它只是访问其元素。

C 是否为字母分配了特定的数字,即。数组中的 a、b、c 等?

数组中没有字母。ints。但是,是的,读取的字符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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

当我们将指针打印到字符类型时,为什么C ++显示字符?

当我使用'|'时会发生什么 或'<',c ++

当我们在C#中访问字符串的'Length'属性时会发生什么?

当我们在C ++中更改字符串的值时会发生什么

当我们使用%d扫描字符时会发生什么?

当我们使用json键作为JS代码时会发生什么情况?

当我们不等待异步方法时会发生什么

当我们在C ++中声明头文件时,为什么不将空格视为空白?

当我们在Python的类中给出函数定义时会发生什么

当我们在方法内部创建锁(同步块)对象时会发生什么?

itemgetter如何工作?当我们将其初始化为密钥时会发生什么

当我们调用puppeteer waitForSelector API时会发生什么

当我们混合使用opencv和dlib时,cv :: imread()在c ++项目中失败

当我们在C中将数字转换为较小的数字时,会发生什么情况?

当我们尝试设置当前执行代码的寄存器时会发生什么?

当我们单击SSMS的“新查询”按钮时会发生什么?

当我们在C#中使用JOIN和GROUP BY查询时如何填充datagridview

当我们向GPIO写入0时会发生什么

当我们在c中使用字符串文字初始化char数组时,是否会发生垃圾回收?

当我们尝试修改字符串常量时会发生什么?

当我们在html标记中包含错误的属性时会发生什么?

当我们尝试访问数组元素时会发生什么?

当我们在C ++中没有合适的左值时,应该以int&返回什么?

当我们没有将 Operator+ 定义为朋友时?C++

当我们覆盖 C 中的联合字段时发生了什么?

当我们有函数和 lambdas 时,C++ 中的“块”是什么?

当我们在 c 中有更简单的代码时,为什么要使用 malloc 或 calloc?

当我们在 C++ 中使用“while”时会发生什么转换?