解释小的C语言代码

[复制链接]
查看11 | 回复4 | 2010-10-12 21:53:58 | 显示全部楼层 |阅读模式
main()
{int a[]={2,4,6,8},*p=a,i;
for(i=0;i<4;i++) a=(*p)++;
printf("%d\n",a[2]);
}
程序运行结果是3.可是我自己笔算的结果是4.请高手帮忙解释一下。谢谢!

回复

使用道具 举报

千问 | 2010-10-12 21:53:58 | 显示全部楼层
for循环中,a的值永远为a[0]的值,而a[0]的值为2,3,4,5,这是因为(*p)++,这句话相当于a=a[0]++;a[2]正好是i==2这次前面那次a[0]的值。你可以把程序这样写:void main(){int a[]={2,4,6,8},*p=a,i; for(i=0;i<4;i++)
{
a=a[0]++;
printf("%d %d\n",*p,a);
}}
回复

使用道具 举报

千问 | 2010-10-12 21:53:58 | 显示全部楼层
我靠,搞了半天终于搞明白了。因为一开始你赋值的时候p已经指向a数组的第1位了。直接给你这个吧。p=1 (开始赋值时p指向a数组第一个元素)a[0]=2 p=2 (a[0]为p++后的值)a[1]=2 p=3 (先给a[1]p的数值,然后p再向前走1个)a[2]=3 p=4 (一样的。)a[3]=4 p=5a[4]=5 p=6
回复

使用道具 举报

千问 | 2010-10-12 21:53:58 | 显示全部楼层
答案就是4,LZ你故意的吧
回复

使用道具 举报

千问 | 2010-10-12 21:53:58 | 显示全部楼层
我编译的是4啊~~怎么你是那样的啊~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行