天天看点

理解指针的运算

当针对一个指针进行加法减法时,其完成的是将内存中的指针向前或向后移动,其移动的步长对应于指针所指向的数据类型的字节长度.如:

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)是不成立的.

上一篇: 好好上网

继续阅读