当针对一个指针进行加法减法时,其完成的是将内存中的指针向前或向后移动,其移动的步长对应于指针所指向的数据类型的字节长度.如:
double b;
double *dp=&b;
cout<<dp<<endl;
cout<<dp+1<<endl;
cout<<dp+2<<endl;
输出:
0012FF70
0012FF78
0012FF80
可以看出每次移动的步长是sizeof(double)既8个字节.
语句cout<<dp+2<<endl;很有可能被C++编译器改造成:
cout<<(double*)((int)dp=2*sizeof(double))<<endl;
而对两个double型的指针进行减法dp2-dp1很有可能被改造成:
((int)dp2-(int)dp1)/sizeof(double)
由此可知我们不能针对void*进行加减法运算,因为sizeof(void)是不成立的.