c - 访问指针变量作为指向 C 中不同类型的指针
问题描述
通过取消引用指向不同类型的指针的指针来访问指针变量是一种好习惯void
吗?这会打破严格的别名规则吗?C 和 C++ 在别名规则上存在一些差异。在这个问题中,我们专注于 C。另一个考虑 C++ 的问题可以在这里找到。在以下示例中, adouble*
被作为 a 访问void*
。
int create_buffer(void** ptr, ...)
{
*ptr = malloc(...);
...
}
int main(void)
{
double* buffer;
// The problematic code is here, double**
// is coerced to void**, which is later
// dereferenced by the function
create_buffer((void**)&buffer, ...);
...
}
以下是否更好:
// keeping void** just as an indicator in the interface
// that the pointer is pointing to a pointer to any type
// it could be replaced by just void*
int create_buffer(void** ptr, ...)
{
void* result = malloc(...);
memcpy((void*)ptr, &result, sizeof result);
}
解决方案
不回答你的问题,但你可以通过做明确定义的事情来绕过你提到的不确定性:
int main(void)
{
double* buffer;
{
void * pv;
create_buffer(&pv, ...);
buffer = pv; /* C does not need any cast here. */
}
...
推荐阅读
- sql - 记录存在于一个 DB2 表中,但不存在于另一个表中
- asp.net-core - $(...).formSelect 不是函数
- typescript - 为什么 TypeScript 不能推断出相同对象类型的赋值?
- arrays - 在将一列复制到另一列之前是否可以制作 if/else ?
- java - 如何使用 java selenium chromedriver 单击图像/按钮
- excel - 如何更改纸张的打印方向?
- airflow - 防止气流回填作业
- javascript - React Hook "useContext" 在函数 "age" 中被调用,它既不是 React 函数组件也不是自定义 React Hook 函数
- python - 每次我使用 Google Drive API 搜索并将它们存储在列表中时都会附加文件名?
- filtering - Spotfire - 按计算列中的值过滤表