C数组初始化改变了看似无关的其他变量



我希望有人能告诉我为什么在下面的简单C程序中运行for循环后,我的int变量被设置为0。在我看来,循环应该与下面代码中名为"breakPoint"的变量无关?

#include<stdio.h>
#define MAX 100
int main(){
char line[MAX];  //array to use for something
int breakPoint = 23;
printf("breakPoint is %d nn", breakPoint); //breakPoint prints out as 23
/* intialize the array */
for(int i = MAX; i>0; --i)
line[i]=0;
printf("breakPoint is now  %dnn", breakPoint); //breakPoint now prints out as 0???
getch();
return 0;
}

非常感谢,我很感激。

我怀疑我是在声明数组为一个大小(即MAX(,然后当我运行for循环时,我试图设置每个元素,但我的索引是关闭的。我发现,当我在MAX-1而不是MAX处启动for循环索引时,问题就消失了,即变量breakPoint保持不变。

/* intialize the array this way fixes the problem */
for(int i = MAX-1; i>0; --i)
line[i]=0;

但还是有人能向我解释为什么会发生这种事吗?特别是,为什么打乱我的字符数组会影响一个完全不同的变量?链接是什么?

您的数组char[MAX]包含MAX元素。由于C中的计数从0开始,这意味着具有5个元素的数组将具有索引0、1、2、3和4。类似地,MAX元素的数组将从0变为MAX - 1。但是,您的for循环是从i = MAX开始的。由于MAX大于MAX - 1,因此您的访问超出了数组的边界。

做这样的事情是未定义的行为,这意味着从技术上讲,任何事情都可能发生。程序可能会崩溃。你可能会在程序中占用一些其他内存。你可能会打开一个平行维度的虫洞,引起邪恶的太空山羊的入侵,它们会袭击你的袜子抽屉,吃掉你每双袜子中的一只,所以你想知道为什么你的袜子一直不见了。几乎任何事情都会发生。

无论如何,在这种情况下,发生的情况是覆盖了int变量的值。

最新更新