在 C 中如何将一种类型的变量更改为另一种类型?

2024-05-14

我要做:

int main () {
  bla bla bla

  void *onetype;

  switch (USER_INPUT_TYPE) {

      CASE CONVERT_TO_CHAR:
          convert onetype VOID TO CHAR >>> HOW???

      CASE CONVERT_TO_INT:
          convert onetype VOID TO INT >>> HOW???

   LOT OF CASES...
   }
}

是的,我知道类型转换,但类型转换是“临时”更改。

那么,有没有办法用C语言来实现呢?

EDIT :

停停停!请看,你在做什么是类型转换,我知道这一点,你正在创建另一个所需类型的变量,如 int i = (int) onetype,我不想要这个,我想要其他类型,如 onetype = (int ) onetype,无需重新创建它们,无需分配另一个变量。

非常感谢大家!


您想要的是运行时类型信息 - 拥有一个只能在运行时确定类型的变量。 C 语言中没有此功能 - 一旦程序被编译,类型就会被删除,并且只存在内存 blob。动态语言维护类型信息并本地实现它。

您可以设计自己的本土类型标记系统:

typedef union {
int i;
char c;
float f;
} evil;

typedef struct {
  evil value;
  int type;
} tagged_t;

enum {
  TYPE_INT, TYPE_CHAR, TYPE_FLOAT
};

tagged_t bar;
bar.value.c = 'a';
bar.type = TYPE_CHAR;

现在,每次您希望使用 tagged_t 类型时,您都必须为您存储的每种可能的变量类型实现一个条件,或者能够确定该代码区域是否允许某种类型。

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

在 C 中如何将一种类型的变量更改为另一种类型? 的相关文章

  • 简单的 C++ 线程

    我正在尝试在 C Win32 中创建一个线程来运行一个简单的方法 我是 C 线程的新手 但对 C 中的线程非常熟悉 这是我想做的一些伪代码 static void MyMethod int data RunStuff data void R
  • 如何在C编程中获取当前时间(以毫秒为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 ANSI C 测量以毫秒为单位的时间 https stackoverflow com questions 361363 how to measure time in milliseconds
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 对相当大的整数的大集合的操作的快速实现

    描述 我实现了以下类 LabSetInt64 参见下面的代码 这里的目标是尽可能快地操作大量大整数 最多 10M 的值 我的主要要求集中在 至关重要 尽快获取集合的大小 基数 重要 能够非常快速地迭代一组集合 所以 从下面的实现开始 我还有
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 带有 Unicode 字符的主机名在 Windows 8 中有效

    Uri CheckHostName 回报UriHostNameType Unknown到处都是 但在 Windows 8 上 它又回来了UriHostNameType Dns 为什么突然间带有 Unicode 西里尔字符的主机名在 Wind
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • RabbitMQ + Windows + LDAP 无需发送密码

    我正在尝试在 Windows 7 上使用 RabbitMQ 3 6 2 进行 LDAP 身份验证 授权 我已经在应用程序发送用户名 密码的情况下进行了基本身份验证 但密码位于我需要弄清楚如何进行的代码中避免 有没有人在不提供密码的情况下成功
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R
  • 如何通过Task.ContinueWith创建传递?

    我想在原始任务结束时添加一个任务 但想保留原始结果和类型 附加任务仅用于记录目的 例如写入控制台等 例如 Task Run gt DateTime Now Hour gt 12 Hey throw new Exception Continu

随机推荐

  • iPhone OS 3.0.1 会毁掉你的开发手机吗?

    我将手机更新到3 0 1 虽然手机作为手机工作正常 xcode http en wikipedia org wiki Xcode组织者不再知道手机的名称 它还说这个版本的 xcode 不支持 3 0 1 我下载了最新版本的xcode和操作系
  • 使用把手显示来自 parse.com 的 json 响应

    我想将 json 响应传递给车把 我已经查看了解析文档和 stackoverflow 问题 但我似乎无法弄清楚这一点 这是回应 results address 755 W Yale createdAt 2013 02 09T01 12 15
  • 开源 EDA 项目

    您知道 EDA 电子设计自动化 领域有哪些开源项目正在寻找 C 程序员吗 如果您经常关注 gEDA 的邮件列表 您也许能够加入 gEDA 细节 http www gpleda org developer html http www gple
  • Webpack 子编译器更改配置

    我希望在编译我的服务工作人员时将我的 webpack 构建的输出定义为变量 我想使用子编译功能来编译放入不同路径的服务工作人员 我需要 webpack 编译发出的输出来正确编译服务工作线程 我最初的做法是使用与离线插件相同的策略 在其中创建
  • 为什么 Mac OS 上的 C 运行时允许预组合和分解的 UTF-8?

    所以我们都知道 Mac OS 上的文件系统具有使用完全分解的 UTF 8 的古怪功能 如果您调用 POSIX API 例如realpath 例如 您将从 Mac OS 返回这样一个完全分解的 UTF 8 字符串 当使用像这样的 API 时f
  • 从所有表中选择

    我的数据库中有很多表都具有相同的结构 我想从所有表中进行选择 而不必像这样列出所有表 SELECT name FROM table1 table2 table3 table4 我尝试过 但这不起作用 SELECT name FROM 有没有
  • 从文件中读取未知长度的int数组

    如何从文件中读取未知长度的整数数组 我没有找到获取数组大小的方法 所以我尝试了一些临时字符串的东西 但我的代码爆炸了 有更好的想法吗 Use std vector std ifstream inFile fileName std vecto
  • Laravel 5.3 Eloquent 事务和外键限制

    我正在从事一个更大的项目 我们在一个 Postgres 数据库中有多个模式 我们在模式之间创建了外键 这是一个例子 gt 我们有公司模式和用户模式 公司模式有company users表 该表对user users表有外键限制 CREATE
  • PostgreSQL 如何创建数据库或模式的副本?

    有没有一种简单的方法可以在 PostgreSQL 8 1 中创建数据库或模式的副本 我正在测试一些软件 它对数据库中的特定模式进行大量更新 我想复制它 以便我可以与原始版本进行一些比较 如果它位于同一服务器上 则只需使用带有 TEMPLAT
  • Apache mod_rewrite 将双斜杠转换为单斜杠

    我有一个像这样的网址 http example com img php url http example2 com path to image name jpg 所以我通过这个问题创建了一条规则Apache mod rewrite 复杂 U
  • 如何检测环境是在 Azure 托管服务工作者角色中进行暂存还是生产?

    我在托管服务中担任辅助角色 工作人员每天都会发送电子邮件 但在托管服务中 有 2 个环境 Staging 和 Production 所以我的工人角色每天发送电子邮件 2 次 我想知道如何检测工人是否处于停滞状态或生产状态 提前致谢 根据我的
  • BracketAlignmentStyle:在右括号之前中断

    结合开括号后对齐 BracketAlignmentStyle 选项BinPackArguments and BinPackParameters set to false 可以得到以下格式 someShortFunction argument
  • 递归方法比交互式方法慢 10 倍 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 代码已尽可
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 如何识别 SQL Azure 中的死锁?

    我有一个由两个实例组成的 Windows Azure 角色 有时交易会失败并显示SqlException与以下文字 事务 进程 ID N 在锁资源上与另一个进程发生死锁 并被选为死锁牺牲品 重新运行事务 现在我已经谷歌搜索了一段时间并阅读这
  • 设置 location.hash 时防止默认行为

    当我这样做时 location hash test url 会更新 页面会定位到具有该 id 的元素 有没有办法阻止页面定位到该元素 Solution 您无法阻止这种行为 但您可以通过暂时隐藏目标来愚弄它 例如 像这样 与 jQuery 无
  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • jsp页面中的tomcat7和EL; pageContext.request.contextPath 为空?

    我的 JSP 页面包含 视图 源显示该值的 到目前为止我还没有发现任何错误 我的 web xml 指定版本 2 5 如果您将 Web 应用程序部署在 ROOT 上 它将为空 另请参阅其javadoc http docs oracle com
  • Python 中 time.sleep 和多线程的问题

    我对 python 中的 time sleep 函数有疑问 我正在运行一个脚本 需要等待另一个程序生成 txt 文件 虽然 这是一台非常旧的机器 所以当我休眠 python 脚本时 我遇到了其他程序不生成文件的问题 除了使用 time sl
  • 在 C 中如何将一种类型的变量更改为另一种类型?

    我要做 int main bla bla bla void onetype switch USER INPUT TYPE CASE CONVERT TO CHAR convert onetype VOID TO CHAR gt gt gt