在C语言中使用自增操作符来取消引用



对于我的函数,我得到一个空指针,我想指向下一个位置,考虑到传入的指针是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);

这取决于你做事的动机

相关内容

  • 没有找到相关文章

最新更新