声明字符时char和int的区别

2024-01-04

我刚刚开始学习 C,对使用 int 和 char 声明字符感到相当困惑。

我很清楚,任何字符都是由整数组成的,因为字符的“整数”是字符各自的 ASCII 小数。

也就是说,我了解到完全可以使用int不使用 ASCII 小数。例如。声明变量test作为一个角色'X'可以写成:

char test = 'X';

and

int test = 'X';

对于两个字符声明,转换字符是%c(尽管测试被定义​​为int).

因此,我的问题是使用声明字符变量之间的区别char and int以及何时使用int声明一个字符变量?


区别在于变量的字节大小,以及变量可以保存的不同值。

需要使用 char 来接受 0 到 127(含)之间的所有值。所以在常见环境中它恰好占据 一个字节(8 位)。标准未指定它是有符号 (-128 - 127) 还是无符号 (0 - 255)。

int 要求至少是 16 位有符号字,并且接受 -32767 到 32767 之间的所有值。这意味着 int 可以接受 char 中的所有值,无论是后者有符号还是无符号。

如果你只想在变量中存储字符,你应该将其声明为char。使用int只会浪费内存,并可能误导未来的读者。该规则的一个常见例外是当您想要针对特殊条件处理更广泛的值时。例如函数fgetc从标准库被声明为返回int:

int fgetc(FILE *fd);

因为特殊的价值EOF(文件结尾)定义为int值 -1(2 补码系统中所有位都为 1)表示大于 char 的大小。这样,任何 char(在通用系统上只有 8 位)就不能等于 EOF 常量。如果该函数被声明为返回一个简单的char,没有什么可以区分 EOF 值和(有效)字符 0xFF。

这就是为什么下面的代码是这样的bad并且永远不应该使用:

char c;    // a terrible memory saving...
...
while ((c = fgetc(stdin)) != EOF) {   // NEVER WRITE THAT!!!
    ...
}

在循环内部,一个 char 就足够了,但是为了使读取字符 0xFF 时测试不成功,该变量需要是一个 int。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明字符时char和int的区别 的相关文章

  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 使用 purrr 影响列表中每个数据帧的单列

    仍然习惯咕噜声 我有一个我认为的问题should很容易 但我不知道该怎么做 我想要做的就是将下面的日期时间转换为带有 as Date 的日期 它是一个数据框列表 一直在玩 但还没有找到有效的东西 任何帮助表示赞赏 df lt data fr
  • Bootstrap 5 alpha 2 卡组示例未像文档中那样显示

    我为卡片台插入了这个示例 并认为它会像文档中所示的那样显示 但事实并非如此 https stackpath bootstrapcdn com bootstrap 5 0 0 alpha2 css bootstrap min css 我正在使
  • 用于“未保存数据”保护的客户端/JS 框架?

    我们有一个典型的 Web 应用程序 它本质上是一个数据输入应用程序 有很多屏幕 其中一些屏幕具有一定程度的复杂性 我们需要提供标准功能 以确保如果用户在离开或关闭浏览器之前忘记单击 保存 按钮 他们会收到警告并可以取消 但仅当存在未保存或脏
  • 如何在javascript中模拟HTML5拖放事件?

    正如标题 我试图在 JavaScript 中模拟 HTML5 拖放事件 我研究了 jquery ui simulate 以及模拟功能here https stackoverflow com questions 6157929 how to
  • 如何为连接表创建 DAO?

    我目前正在学习使用Dao我的项目中的模式 我知道 一张表相当于一张Dao 我对吗 就像StudentDao SubjectDao Each Dao施行CRUD相关表中的操作 但我的问题是 我将如何创建一个DAO对于连接表 假设我有一个查询来
  • NSManagedObject 属性数组

    我想获得我的属性的数组NSManagedObject所以我可以使用 KVO 来导出它们 我可以手动创建一个数组 然后迭代它 但是 我想自动获取此列表 然后迭代 NSManagedObject 有一个与其关联的实体 使用NS实体描述 http
  • 为什么 C# 中结构体的推荐大小为 16 字节?

    我读了 Cwalina 书 有关 NET 应用程序开发和设计的建议 他说 一个设计良好的结构体的大小必须小于 16 个字节 出于性能目的 到底是为什么呢 而且 更重要的是 如果我运行 NET 3 5 很快将成为 NET 4 0 我可以拥有更
  • p:dataTable 中的 SummaryRow 不起作用

    我试图在我的数据表上显示总价值 我的代码类似于 primefaces 展示数据表 摘要行 http www primefaces org showcase ui data datatable summaryRow xhtml但仍然不工作
  • 循环中的 OVER_QUERY_LIMIT

    我在使用 Google Places Javascript 库时收到 OVER QUERY LIMIT 状态代码 我的帐户启用了计费功能 因此实际上并不是我达到了发出的地点请求数量的限制 而是我正在使用 Javascript 库并循环处理数
  • 阻止特定 CSS 文件在 Yii 中加载

    我正在 Yii 中编码 我已在 main php 布局文件中注册了 main css 文件 如下所示 Yii app gt clientScript gt registerCssFile this gt assetsBase css mai
  • Hibernate中sql、oracle和mysql中的nvarchar注释映射

    我们使用 MS SQL Oracle 和 mysql 作为我们的数据库 我们使用hibernate注释来创建表 在注释类文件中我们将列定义声明为 Column name UCAALSNO nullable false columnDefin
  • 在字符串中使用运算符(Qualtrics + JavaScript)

    如果有人熟悉调查程序 我会尝试使用 Qualtrics 并且我正在嵌入 JavaScript 以便以特定方式对某些问题进行评分 我遇到的问题是 我试图将字符串与运算符连接起来 但它失败了 但是当我在不同的编辑器中尝试时 字符串运算符工作正常
  • 一个目录(同一级别)中的多个存储库 - 可能吗?

    我最初的问题是我有一个编写各种脚本的目录 它们中的每一个都是独立的 并且通常是一个文件长 我想对它们应用一些版本控制 但我有以下问题 要求 I 不想要必须储存每个小脚本 in a 单独的目录 I don t want to store th
  • 是否有任何 Java 库使用注释来生成代码?

    有谁知道使用中描述的技术 注释和类工作 的库本文 http www ibm com developerworks java library j cwt06075 自动生成标准 Java 类的标准对象方法 toString equals 和
  • 设置 TeamCity 以集成到 OSX Build Agent

    继我的问题之后设置 Teamcity 来构建 Android https stackoverflow com questions 28839437 setting up teamcity to build android studio pr
  • 使用 ASP.net 4 MVC 时,“tsc.exe”退出并显示代码 1

    我正在按照 TypeScript 网站上的教程将 TypeScript 和 Angular 2 添加到我的 ASP net MVC 项目中 教程可以从Typescript网站找到here https www typescriptlang o
  • 未解析的参考:将 gradle 转换为 gradle.kts 时的 ext

    默认情况下 当我从 Android Studio 创建撰写应用程序时 它会给我ext如下在我的根项目中build gradle buildscript ext compose version 1 0 0 repositories googl
  • Android 10 中 LocalService 和 LocalBinder 内存泄漏

    我有一个LocalService完全按照此处建议的实现 以便通过绑定器提供对服务方法的访问 https developer android com guide components bound services Binder https d
  • Java 脚本安全性(JRuby、Jython、Groovy、BeanShell 等)

    我希望运行一些未经验证的脚本 用尚未确定的语言编写 但需要基于 Java 因此 JRuby Groovy Jython BeanShell 等都是候选者 我希望这些脚本能够执行某些操作并限制执行其他操作 通常 我会使用 Java 的 Sec
  • 声明字符时char和int的区别

    我刚刚开始学习 C 对使用 int 和 char 声明字符感到相当困惑 我很清楚 任何字符都是由整数组成的 因为字符的 整数 是字符各自的 ASCII 小数 也就是说 我了解到完全可以使用int不使用 ASCII 小数 例如 声明变量tes