求 这道题怎么做!? 指针问题?

来源:百度知道 编辑:UC知道 时间:2024/09/24 03:24:02
#include<stdio.h>
#include<string.h>
void main()
{
char *p="abcdefgh",*r;
long *q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s\n",r);
}

输出结果是什么啊????
还有为什么会得出这个结果来?????

这与编译系统规定的long数据所占内存大小有关。
如规定long数据占4个字节,则结果为efgh。
解释:
首先*p="abcdefgh"使指针p指向字符串“abcdefgh”的地址,即字符a的地址。
然后赋值语句q=(long*)p; 使指针q也指向a的位置(注意别忘了char类型数据可与整型数据通用,所以可以赋值)。
然后q++使指针q移动4个字节(因为q是long类型的指针,移动大小与类型大小相同,所以移动4个字节),即移动了4个字符的大小(一个字符占一个字节),所以q指向了e;
r=(char*)q; 又使指针r指向了e,所以输出结果为efgh(从e开始输出,遇到空字符结束,即输出到结尾)

efgh

同意楼上的.
答案很详细.
你仔细体会一下吧