关于C 语言

[复制链接]
查看11 | 回复2 | 2010-9-29 21:52:32 | 显示全部楼层 |阅读模式
int m=10,n=5,a[10]={10,15,20};
void f1(void);
void f2(int m);
main()
{int i;
for(i=0;i<7;i++) f1();
f2(1);printf("\n%d,%d",a[m],a[n]);
}
void f1(void)
{static int n=3;
a[n]=a[n-1]+a[n-2]+a[n-3];
n++;
}
void f2(int m)
{ for(;m<3;m+=2)
{ int m;
for(m=1;m<4;m++)

printf("%d",a[m++]);
}
}
上机后结果是:15,45,

10,145
我不懂的是第二行第一空,请问是为什么是10?

回复

使用道具 举报

千问 | 2010-9-29 21:52:32 | 显示全部楼层
你的数组已经越界了 ,a[10]的数组是不可能出现a[10]的最多也是a[9]这里你的a【10】是内存中的一个随机值。你可以插入断点调试看下,a【10】以后的值都是随机的不可预测的。
回复

使用道具 举报

千问 | 2010-9-29 21:52:32 | 显示全部楼层
printf("\n%d,%d",a[m],a[n]);执行这句时,m=10也就是说,其位置是a外的一个值。具体值可能跟当时的内存分配有关。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行