今天看到《C陷阱与缺陷》书中的一段代码:
int i,a[10];
for(i=1;i<=10;i++)
a[i]=0;
书中说:在for语句的比较部分本来是i<10;却写成了i<=10;因此实际上并不存在的a[10]被设置为0,也就是内存在数组a之后的一个字(word)的内存被设置为0。如果用来编译这段程序的编译器按照内存地址递减的方式来给变量分配内存,那么内存中数组a之后的一个字(word)实际上是分配给了整型变量i。此时本来循环计数器i的值为10,循环体内将并不存在的a[10]设置为0,实际上却是将计数器i的值设置为0,这就陷入死循环。
看完后不明白书中说的“编译器按照内存地址递减的方式来给变量分配内存”以及为什么会陷入死循环,于是在VC6.0下作了试验。
|