分析c语言的运行结果?

 我来答
手机用户99252
2011-05-11 · TA获得超过329个赞
知道答主
回答量:346
采纳率:0%
帮助的人:257万
展开全部
没碰到这样用的,这个只能出现在“深度剖析”里面,我们就根据结果“剖析”一下吧,我把程序修改一下:
#include <stdio.h>
int main()
{
int i;
int a[5]=;
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
char *p = (char *)((int)a);
printf("%x,%x\n",ptr1[-1],*ptr2);

for(i=0;i<20;++i)
printf("%x ",*(p++));
}
这样输出结果是:
5,2000000
1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0
先来看ptr1,&a是指向a[5]数组的头,&a+1指向哪里呢?如果我们把a[5]定义成a[2][5]我们就可以确定&a+1应该是指向a[1][0],是a[0][4]后面的一个单元,根据程序的运行结果,可以确定&a+1应该就是把a[5]像a[2][5]一样处理的,即&a+1指向了a[4]后面的一个单元,所以ptr1[-1]=*(ptr1-1)=5

想明白ptr2的值,应该看我增加的输出。(int)a先把a转化成int型,然后(int)a+1就是像int型一样处理了,这里的+1当然是向前增加一个字节喽,所以(int)a+1应该指向:
1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0
^

(int*)又告诉编译器(int)a+1要按照int型指针处理,所以*ptr2指向的内存块的内容应该是:
00 00 00 02
按照C对int型在内存的存储方式,这个值就是
2000000

补充一点儿:我用的是win7 64位操作系统,int型占4个字节的
qzhao_1
2011-05-11 · TA获得超过2.4万个赞
知道大有可为答主
回答量:2.4万
采纳率:76%
帮助的人:4447万
展开全部
虽然我没有看到你的 C 程序,但是我要非常认真地告诉你:C 程序的运行结果是要在 C 编译环境中设置断点、单步跟踪检查出来的,而不是在纸上看程序看出来的。你采用我的方法试试看,应该能够找出程序错误所在。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喻秉084
2011-05-11 · 超过10用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:33.1万
展开全部
你懂调试不? 把调试弄懂再说吧
追问
懂啊    结果都出来了,老师要求分析其运行结果,不知道怎么着手分析
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式