繁体   English   中英

在C中解引用使用增量运算符

[英]Using Increment operator with de-referencing in C

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

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

我收到以下编译错误:

Error[Pe137]: expression must be a modifiable lvalue

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

强制转换不会产生左值(请参见C11标准的6.5.4脚注104部分) ,因此您不能对其结果应用后递增++运算符。

常见问题解答:4.5

在C语言中,强制转换运算符并不意味着“假装这些位具有不同的类型,并相应地对其进行处理”; 它是一个转换运算符,根据定义,它会产生一个右值,该右值不能分配给++或使用++递增 (如果特定的编译器接受上述表达式,则可能是偶然的,也可能是有意但非标准的扩展。)

试试这个

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

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

*ptr++;

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

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

这真的取决于你做事的动机

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM