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标准证明是非法的.
++
需要一个左值.你的代码可能是:
char *c = p;
++c;
return *c;
Run Code Online (Sandbox Code Playgroud)
虽然编写起来要简单得多 return ((char *)p)[1];