C语言中数组长度定义为5为什么会出现a[5]?

程序代码:
#include<stdio.h>
#define n 5

void main()
{
int a[n],i=0,j,t;
printf("请输入数字:");
for(;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
int k;
k=a[0];
for(i=0;i<n;i++)
{
if(k%a[i]==0)
continue;
k=k+a[0];
}
printf("最小公倍数:%d\n",k);
int m;
m=a[n-1];
for(i=0;i<n;i++)
{
if(a[i]%m==0)
continue;
m=m-1;
}
printf("最大公约数%d\n",m);
}

这个程序都是0到4的遍历,没看到遍历到5的啊,如果遍历到5,a[5]会让程序中断的追问

但是图上显示的j=5a[j]的确分配了一个值啊

追答

那j = 5是在什么时候,j只有在遍历完了最后一次判断的时候变成5,这个时候不会再进入循环,也不会有用到a[5]

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-17
实质上最后一个空间是有值的,编译器会自动将其赋值为结束标志