表达式必须是使用简单指针算法指向完整对象类型的指针

010*_*101 10 c

我正在尝试用void*做一些基本的指针算法.我的实际代码通过使用sizeof然后乘法来计算偏移量.下面是示例代码,用于显示问题的实例.

void * p;
p = 0;
p = p + 1;
Run Code Online (Sandbox Code Playgroud)

我在C(而不是C++)中使用MSVC编译器.

错误是:

expression must be a pointer to a complete object type  
Run Code Online (Sandbox Code Playgroud)

我不明白这个错误试图说的是什么.这里没有对象或结构.

Joh*_*nck 13

指针算术总是根据指向对象的大小来确定.递增a char*将使地址前进一,而int*通常为四(字节).但是void具有未知的大小,因此void*标准不允许指针算术运行.首先投射到合适的类型; 如果您只是想操纵地址,就好像它是一个数字然后转换为char*或使用intptr_t.