这个怎么是死循环???

来源:百度知道 编辑:UC知道 时间:2024/05/13 22:42:08
#define ARRAY_SIZE 10
main()
{
int i;
int array[ARRAY_SIZE];
i=1;
while(i<=ARRAY_SIZE)
{
array[i]=i-1;
i++;
}

}

需要哪些知识才能解释???编译原理吗????

有一点编译原理的味道^^^^^^
int array[ARRAY_SIZE];
int i=1;
在内存中,放的位置是array0~9 i
也就是i紧挨着array在内存出现.所以
while(i<=ARRAY_SIZE)
{
array[i]=i-1;
i++;
}
当i==10时,循环还没跳出.所以有array[10]=9,其实就是i=9的赋值,接着下面又i++,所以i变回10,一直循环下去.

不过这个应该和编译器有关,有些的话执行时到了array[10]的赋值就会报错也未知~~~~~~~

while(i<ARRAY_SIZE)

没有a[ARRAY_SIZE]

这和VB不一样

死循环的原因在i<=ARRAY_SIZE这个条件有问题,
在i=10时循环条件成立,而没有array[10]这个单元,内存溢出了。
改成这样就行了。
#define ARRAY_SIZE 10
main()
{
int i;
int array[ARRAY_SIZE];
i=1;
while(i<ARRAY_SIZE)
{
array[i]=i-1;
i++;
}

}