C语言问题:以下程序输出结果是()?

main()
{
int n[2],i;
int *p=n;
for(i=0;i<2;i++)
{
*p=i;p++;
}
printf("%d\n",*p);
}

程序是错的,因为数组越界了
循环体执行了两次,第一次把0赋给n[0],第,二次把1赋给n[1],退出后p指向n[2],而n[2]没有被初始化的,是一个未知值。当然,如果你把程序改成
main()
{
int b=3;
int n[2],i;
int *p=n;
for(i=0;i<2;i++)
{
*p=i;p++;
}
printf("%d\n",*p);
}

那么结果输出就是b的值,3.追问

请问,为什么int b=3,之后,就输出3了呢?指针P指向数组n啊,跟b有关系??

追答

因为可以明显看出你这个程序数组越界了

内存中按从低到高地址存的数据是

n[0]=0
n[1]=1
b=3

你的p从n[0]指到n[1],结果又加了一,就指向b了,由此导致了未知的错误。如果b这个地方存的是一个其他值的话,那么出现的结果就会是其他值

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-15
1245120运行结果就是这个!但这个不应该是这样的!
第2个回答  2012-03-15
指针越界,以后遇到这种小程序尝试自己调试,看数据的变化
第3个回答  2012-03-15
这是输出一个错误的值,因为该函数没有明确的传递,*p=i;p++;这里没有正确的赋值
第4个回答  2012-03-16
不确定,你这越界了,得看内存里面存的是什么.
相似回答