我把定义 i 和 b[20]倒了一下
int b[20];
int i;
输出结果就不一样了,看来还是临时变量压栈的顺序问题
我重新改写了下程序
int main(void)
{
int b[20] ;
int i ;
printf("0x%08x---0x%08x \n", &(b[-1]), &i);
for (i =100 ; i<125 ; ++i)
printf ("%d \n" , b[-1]);
return 0 ;
}
输出结果和楼主的一样,下面我画了下栈空间的示意图。
int i; int b[20];
int b[20]; int i;
栈空间: 栈空间:
b[0] i
b[1] b[0]
b[2] b[1]
b[3] b[2]
b[4] b[3]
b[5] b[4]
b[6] b[5]
b[7] b[6]
b[8] b[7]
b[9] b[8]
b[10] b[9]
b[11] b[10]
b[12] b[11]
b[13] b[12]
b[14] b[13]
b[15] b[14]
b[16] b[15]
b[17] b[16]
b[18] b[17]
b[19] b[18]
i b[19]