忍耐是痛的,但是它的结果是甜蜜的。——卢梭
这是我在生活中看到别人犯过的错误,我觉得其实这种错误,如果没有经历过,一定不会发现他的错误。 请看下面的代码:
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {0};
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
看完之后,肯定会有些的疑问,但是输出的结果是什么呢? 其实,最后的结果是无限制的死循环的打印hehe,那到底是为什么呢?
我们可以进一步的调试,判断i创建的位置,并且观察arr创建的位置。在观察的同时,我们要注意一下。 1、栈区内存的使用习惯是从高地址向低地址使用,所以i先创建,就会比arr整体的数组地址高 2、数组在内存中的存放是,随着下标的增长,地址是由高到低的。也就是下面所给的图片所表达的样子 3、值得注意的是,在不同的编译器下,arr和i之间的空格可能不只是2个整型字节,这种情况下,只是刚刚巧合。
所以,一些意想不到的错误,只有在调试的情况下才能够展示出来,所以调试是很重要的。就比如,医生给病人看病,需要做B超,CT一样,有着不可替代的重要性。
这些有助于我们更好的理解。