对于我的函数我得到一个void指针,我想指向下一个位置,考虑到传入的指针是char类型。
int doSomething( void * somePtr )
{
((char*)somePtr)++; // Gives Compilation error
}
我收到以下编译错误:
Error[Pe137]: expression must be a modifiable lvalue
这是运营商优先考虑的问题吗?
答案 0 :(得分:3)
强制转换不会产生左值(参见C11标准的第6.5.4节脚注104),因此您不能将post increment ++
运算符应用于其结果。
在C中,强制转换运算符并不意味着“假装这些位具有不同的类型,并相应地对待它们”; 它是一个转换运算符,根据定义它会产生一个rvalue,它不能分配给,或者用++ 递增。 (如果特定编译器接受上述表达式,则可能是意外或故意但非标准的扩展。)
试试这个
char *charPtr = ((char*)somePtr);
charPtr++;
答案 1 :(得分:1)
如果要将指针移动到下一个,则可以使用:
*ptr++;
如果要更改将指针位置复制到另一个变量,则:
char *abc = (char*)(def + 1);
这实际上取决于你做事的动机