在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指针的主要内容,如果未能解决你的问题,请参考以下文章