Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组中的下标超出范围_C_Loops - Fatal编程技术网

C 数组中的下标超出范围

C 数组中的下标超出范围,c,loops,C,Loops,这里数组的下标超出范围 int a[10], i; for (i = 1; i <= 10; i++) a[i] = 0; printf("India"); 输出是一个infinte循环,printf statment不会执行。以下是用K N King写的内容: 当我10岁的时候。程序将0存储到[10]中。但是[10]并不存在。 因此,0在[9]之后立即进入内存。如果变量正好跟在后面 a[9]在内存中,如果是这样,则i将重置为O。导致 循环以重新开始 有人能解释一下吗?这将形成一个无限

这里数组的下标超出范围

 int a[10], i;
for (i = 1; i <= 10; i++)
a[i] = 0;
printf("India");
输出是一个infinte循环,printf statment不会执行。以下是用K N King写的内容:

当我10岁的时候。程序将0存储到[10]中。但是[10]并不存在。 因此,0在[9]之后立即进入内存。如果变量正好跟在后面 a[9]在内存中,如果是这样,则i将重置为O。导致 循环以重新开始


有人能解释一下吗?

这将形成一个无限循环的想法是基于一个关于变量在内存中如何布局的假设。特别是,它假设因为i是在a之后立即定义的,所以它也将在a之后立即分配到内存中


这当然不能保证,但同样肯定会发生。如果是这样,那么对[10]的写入实际上可能会覆盖i。因为它将0写入不存在的a[10],这样做实际上将0写入i。然后,当循环中的条件检查i时,数组索引是以零为基础的,即在您的示例中,是0到9,而不是1到10。为什么是infinte循环因为我可能存储在数组a之后的内存位置,即a[10]所在的位置,所以当我达到10时,a[i]=0会将i重置为零。@RidhimaSharma:没有理由,只是由于越界访问而导致的未定义行为。可能,它会覆盖i,将其设置回零,如您的报价中所述;或者它可以做其他任何事情。@RidhimaSharma,访问越界内存是定义行为的原因。你不能用理性来证明一个特定的未定义的行为。如果您更改编译器甚至编译器选项,您看到的行为可能会发生变化。对于各种UB,尤其是在错综复杂的小段落中,都是一样的。嗯,一个空洞的声音说Plugh。