对于我的函数,我得到一个空指针,我想指向下一个位置,考虑到传入的指针是char类型。
int doSomething( void * somePtr )
{
((char*)somePtr)++; // Gives Compilation error
}
我得到以下编译错误:
Error[Pe137]: expression must be a modifiable lvalue
这是操作符优先级的问题吗?
强制转换不会产生左值(参见C11标准的第6.5.4节脚注104),因此不能对其结果应用后增量++
运算符。
c-faq: 4.5:
在C中,强制转换操作符并不意味着"假装这些位具有不同的类型,并相应地处理它们";是一个转换操作符,根据定义,它产生一个右值,不能赋值,也不能用++自增。(如果特定编译器接受上述表达式,这要么是意外,要么是故意的,但不是标准的扩展。)
试试这个
char *charPtr = ((char*)somePtr);
charPtr++;
如果你想将指针移动到下一个,那么你可以使用:
*ptr++;
如果你想改变指针的位置,复制到另一个变量,然后:
char *abc = (char*)(def + 1);
这取决于你做事的动机