虽然它运行正常,但以下结果导致上述编译器警告:
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指针.
| 归档时间: |
|
| 查看次数: |
4562 次 |
| 最近记录: |