#include <stdio.h>
int main()
{
int a=1;
int b=2;
int c[2]={3,4};
c[2]=5;
c[3]=6;
printf("%d,%d,%d,%d,%d,%d",c[0],c[1],c[2],c[3],a,b);
return 0;
int main()
{
int a=1;
int b=2;
int c[2]={3,4};
c[2]=5;
c[3]=6;
printf("%d,%d,%d,%d,%d,%d",c[0],c[1],c[2],c[3],a,b);
return 0;
}
输出为3,4,5,6,6,5.
为什么a和b分别为6,5 呢?
在堆栈中从高地址到低地址储存为a,b,c[1],c[0],对c[2],c[3]赋值相当于对b和a赋值,因此b为5,c为6,若继续为c之后的位置赋值,还有可能覆盖返回地址,造成更大的错误。