#include<stdio.h>
int m=10,n=5,a[10]={10,15,20} ;
void f1(void);
void f2(int m);
main(){
int i;
for(i=0;i<7;i++){
f1();
}
f2(1);
printf("\n%d,%d",a[m],a[n]);
}
void f1(void){
static int n=3;
a[n]=a[n-1]+a[n-2]+a[n-3];
n++;
}
void f2(int m){
for(;m<3;m+=2){
int m;
for(m=1;m<4;m++){
printf("%d,",a[m++]);
}
}
}
输出:
15,45,
10,145
输出的第二行 a[m]的值为什么是10? 这里m的值是10,a[10]是超出数组边界的啊
编译器并不检查数组越界,运行时出现错误是操作系统检测到的异常。而操作系统只检测要访问的这段内存是否属于该程序,而不是数组越界。
如果精心的控制越界,并给这些位置赋值,就可以改变程序正在执行的代码!!!