警告:减法中使用的类型为'void*'的指针

ide*_*ikz 5 c

虽然它运行正常,但以下结果导致上述编译器警告:

return ((item - (my->items))/(my->itemSize));
Run Code Online (Sandbox Code Playgroud)

'item'是'void*'; 'my-> items'是'void*'; 'my-> itemSize'是'int'

将'item'和'my-> items'作为'int*'进行转换会导致程序运行不正常.删除警告的最佳方法是什么?

zne*_*eak 16

使用指针的加法和减法与指向类型的大小一起使用:

int* foo = 0x1000;
foo++;
// foo is now 0x1004 because sizeof(int) is 4
Run Code Online (Sandbox Code Playgroud)

从语义上讲,大小void应为零,因为它不代表任何东西.因此,指针上的指针算法void应该是非法的.

但是,由于多种原因,sizeof(void)返回1,并且算术运算就好像它是char指针一样.因为它在语义上是不正确的,所以你会收到警告.

要禁止警告,请使用char指针.