在C中使用递增运算符和解引用

时间:2015-06-03 12:52:06

标签: c pointers compilation compiler-errors dereference

对于我的函数我得到一个void指针,我想指向下一个位置,考虑到传入的指针是char类型。

int doSomething( void * somePtr )
{
   ((char*)somePtr)++; // Gives Compilation error
}

我收到以下编译错误:

Error[Pe137]: expression must be a modifiable lvalue

这是运营商优先考虑的问题吗?

2 个答案:

答案 0 :(得分:3)

强制转换不会产生左值(参见C11标准的第6.5.4节脚注104),因此您不能将post increment ++运算符应用于其结果。

c-faq: 4.5

  

在C中,强制转换运算符并不意味着“假装这些位具有不同的类型,并相应地对待它们”; 它是一个转换运算符,根据定义它会产生一个rvalue,它不能分配给,或者用++ 递增。 (如果特定编译器接受上述表达式,则可能是意外或故意但非标准的扩展。)

试试这个

char *charPtr = ((char*)somePtr);
charPtr++;

答案 1 :(得分:1)

如果要将指针移动到下一个,则可以使用:

*ptr++;

如果要更改将指针位置复制到另一个变量,则:

char *abc = (char*)(def + 1);

这实际上取决于你做事的动机