int a[60][250][1000]数组的遍历面试题

来源:互联网 发布:四层横移编程 编辑:程序博客网 时间:2024/06/01 21:17
请问 下面程序有什么错误?
int a[60][250][1000],i,j,k; for(k=0;k<=1000;k++)for(j=0;j<250;j++)for(i=0;i<60;i++)a[i][j][k]=0;

答案说是换循环语句?

    int a[60][250][1000];    int i,j,k;    for(k=0;k<60;k++)        for(j=0;j<250;j++)            for(i=0;i<1000;i++)                a[k][j][i]=1;

理由是什么呢?

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

抱歉没用。。。




首先我运行了一下,k<=1000也是醉了的考点!

但是去了等号还是不能用的。是栈溢出了,原因是这个是在main中定义的一个局部变量,而局部变量是存储在栈中的,栈的容量不足以放下这样的大数组。


于是我换成了小数组,没问题了

    int a[10][10][10],i,j,k;    for(k=0;k<10;k++)        for(j=0;j<10;j++)            for(i=0;i<10;i++)                a[i][j][k]=0;






加了个static表示静态更好,放在静态存储区,也没有这个问题了。

static int a[60][250][1000],i,j,k; for(k=0;k<1000;k++)for(j=0;j<250;j++)for(i=0;i<60;i++)a[i][j][k]=0;



原创粉丝点击