在C中增加强制转换的void指针

Posted

技术标签:

【中文标题】在C中增加强制转换的void指针【英文标题】:Increment casted void pointer in C 【发布时间】:2016-08-29 12:58:21 【问题描述】:

我有一个将 void 指针作为参数的函数。我想将该指针转换为特定类型(例如双精度),然后将其递增。下面的代码正是我想要的

function(void *out)
  double *temp = (double*) out;
  temp++;
  out = temp;

  /* do something with out here */

但是,如果我将所有内容都放在一个表达式中,例如

(double*)out++;

((double*)out)++;

编译器不喜欢它。有没有更优雅的方法来做到这一点?

【问题讨论】:

(double*)out++; 无论如何都不应该工作...... 编译器不喜欢它..请详细说明... ((double*)out)++ 给出“需要左值作为增量操作数” 编译器不喜欢它?哎呀,不喜欢它!这样的代码会实现什么? @KerrekSB :我正在从文本文件中读取不同类型的数组,因此我需要转换它然后移动指针。例如。 (double)out = atof((char*) charpointerfromfile); out = ((double*)out)+1; 【参考方案1】:

表达式

((double*)out)++;

是有问题的,因为它试图增加强制转换的结果,而不是lvalue。但是,将1 添加到强制转换的结果中,并将其分配回out 是完全可以的:

out = ((double*)out)+1;

【讨论】:

以上是关于在C中增加强制转换的void指针的主要内容,如果未能解决你的问题,请参考以下文章

C++|项目开发—强制类型转换回顾

C++|项目开发—强制类型转换回顾

constexpr 和使用重新解释强制转换的静态 const void 指针的初始化,哪个编译器是正确的?

不同类型的指针相互转换的话,需要强制类型转换

不同类型的指针相互转换的话,需要强制类型转换

不同类型的指针相互转换的话,需要强制类型转换