c - 将 void 指针转换为“类型”变量或使用 memcpy?
问题描述
我一直无法为此找到答案。我在 C 中使用哪种方法有关系吗?
int get_int(void *vptr) {
return *(int *)vptr;
}
或者
int get_int(void *vptr) {
int i = 0;
memcpy(&i, vptr, sizeof(int));
return i;
}
它似乎在我的测试中给出了相同的结果,但在每种情况下都是等价的吗?
解决方案
主要区别在于 memcpy 将在更多情况下工作——它只要求从中复制的内存包含适当类型的数据。cast-and-dereference 要求并且还要求指针对于访问该类型是有效的。在大多数机器上,这(只是)需要正确对齐。强制转换还允许编译器假定它不使用不同类型的值进行别名。
最终结果是 memcpy 可能“更安全”,但也可能更昂贵。
推荐阅读
- node.js - 在新的 Windows 进程上触发事件
- c# - 使用逗号分割文本,但忽略字符串中的任何字符
- ruby-on-rails - ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: integer = boolean LINE 1: ...edidos"."nota_emitida" = $1
- javascript - 初始化要在 React.js SPA 中使用的状态信息
- reactjs - 在材料表中使用自动完成
- graphql - 重新获取 MockedProvider 函数后的 Apollo 客户端警告
- reactjs - CORS 问题与软件包版本有关吗?
- javascript - 指针后的文字消失
- ansible - Ansible Tower - 如何将文件从远程 Linux Server1 复制到远程 Linux Server2
- java - 多线程 Optaplanner 中的内存泄漏?