很希奇的问题 值竟然发生变化了

时间:2008-06-20 13:46:27   来源:论坛整理  作者:  编辑:chinaitzhe
#include <stdio.h>

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
网友回复:数组越界,行为就无法估计了
网友回复:
引用 1 楼 brookmill 的回复:
第一个程序的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了
关键字:希奇,问题,竟然,发生,变化,

文章评论

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