请高手帮我解决一下这道C语言题目,谢谢!

以下程序的输出结果为()#include<stdio.h>main(){char*p="abcdefg",*r;long*q;q=(long*)p;q++;r=(char... 以下程序的输出结果为( )
#include<stdio.h>
main( )
{
char *p="abcdefg",*r;
long *q;
q=(long* )p;
q++;
r=(char* )q;
printf("%s\n",r);
}

请简略的说一下过程,谢谢!!
答案是:efgh,不理解啊!
展开
 我来答
Fovergreen
2010-07-18 · TA获得超过133个赞
知道答主
回答量:60
采纳率:0%
帮助的人:73.6万
展开全部
因为p的类型char*,而q的类型是long*,所以要进行强制类型转换。又因为char*是占用一个字节,所以p指向a的首地址。当强制类型转换后,long*占用4个字节,既是处理p这个地址时由原来的以1个字节的处理方式变成了以4个字节的处理方式,也可以形象说是p指向了abcd的首地址,所以p++就指向了e,输出就成了efg,后面的char*只是又把它变回来了。这里没有h,运行过了。
Richardljl
2010-07-18 · TA获得超过685个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:332万
展开全部
char占用1个字节,而long占用四个字节。因此,在指针转化为long*型之后,q++移动了四个位置,即指到了e上,后面又将指针转化成了char型。输出为efg

怎么会出现一个h呢,我是vc++6.0平台,实际运行了,显示的就是efg
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式