void*的增量类型转换为char*失败

Imo*_*lis 1 c pointers void c89 pointer-arithmetic

在这样的函数中:

char nextchr (void* p)
{
    ((char*)p)++;

    return *(((char*)p));
}
Run Code Online (Sandbox Code Playgroud)

这应该返回传递的字符串文字的第二个字符,因为参数p根本无法做到.

为什么会这样?


解决方案总结:

@MM: ++需要一个左值(左手值)来应用它,而类型转换的结果不是那个.

@OP更新:一些编译器(通常/旧的C89// 编译器 /类似我的)可以允许((char*)source)++;/只要它不作为参数传递给函数/,即使它是非法的并且被C标准证明是非法的.

M.M*_*M.M 5

++需要一个左值.你的代码可能是:

char *c = p;
++c;
return *c;
Run Code Online (Sandbox Code Playgroud)

虽然编写起来要简单得多 return ((char *)p)[1];