首先要明白两个概念,指向字符串的指针自增一时移动的是一个字符的距离,而指向整形的数据是,当指针自增一的时候移动的是四个四个字节的长度。
回到本题,先是把指向字符串的指针转换为指向整形的,然后自增一,指针移动四个字节的长度,这是p指针指向了e的位置,并把地址赋给q,此时q指向的位置也是e,然后又把q的指针转换为指向字符型的,所以输出字符串的时候,是从e开始输出的!
相同的原理,把你的程序改一下,看能不能看懂!double类型占八个字节!
#include <iostream.h>
int main()
{
char *p="abcdefgh",*r;
double *q;
q=(double *)p;
q++;
r=(char *)q;
r--;
cout<<r<<endl;
return 0;
}