很希奇的问题 值竟然发生变化了
时间:2008-06-20 13:46:27
来源:论坛整理 作者: 编辑:chinaitzhe
void main()
{
int num=123456, c, i=0, array[5];
while(num)
{
c=num;
array[i]=c;
num/=10;
i ;
printf ("i=%d\n",i);
}
printf ("i=%d\n",i);
}
--------------------------------------------------------------------------------------------------
#include <stdio.h>
void main()
{
int num=123456, c, i=0;
while(num)
{
c=num;
num/=10;
i ;
printf ("i=%d\n",i);
}
printf ("i=%d\n",i);
}
第一个程序的i最后为2 不正常
第二个程序的i最后为6 正常
请问为什么呢?
网友回复:第一个程序的array[5]太小,越界了,可能i正好在栈上被覆盖的位置
改成array[20]应该就没问题了
这个现象和编译器相关。我用gcc,第一个程序的结果i是6
网友回复:数组越界,行为就无法估计了
网友回复:
输出i的地址和array[5] array[6]的地址看看
网友回复:主要还是数组越界访问了, array[5]只能存5个元素, 123456有6位
网友回复:------------------
很明显 数组越界了
网友回复:同一楼 与编译器相关
array[5]; 只能存放5个 但是你在这里面放了6个int array[0]~array[6] 分别存放6 5 4 3 2 1 而array[6]越界了
它覆盖了i所在的栈. 所以i成了1了
关键字:希奇,问题,竟然,发生,变化,
上一篇:char字符无法连接?
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面