求大神解释C语言题,请解释详细一点,谢谢

下面的代码输出什么?
#include
int main(void)
{
int i;
int a[5];
for (i = 0; i <= 5; ++i) {
a[i] = -i;
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}

解题详解

 #include<stdio.h>
void main()
{
    int i=0;
    int a[5]={0,0,0,0,0};
    for (i = 0; i <= 5; i++) {
        a[i] = -i;
        printf("a[%d] = %d\n", i, a[i]);
        if(i==4){
            printf("%p\n",&i);
            printf("%p\n",&a[0]);
            printf("%p\n",&a[1]);
            printf("%p\n",&a[2]);
            printf("%p\n",&a[3]);
            printf("%p\n",&a[4]);
            while(1);
        }
    }
}

运行结果:

结果

a[0] = 0
a[1] = -1
a[2] = -2
a[3] = -3
a[4] = -4
a[5] = -5

调试下就知道,数组的每一个元素等于它下标的负数。

http://codepad.org/6s85TIdv
这是在线编译运行的结果。

#include
int main(void)
{
int i;
int a[5];
for (i = 0; i <= 5; ++i) {
a[i] = -i;//当i=0时,a[0]=0;当i=1时,a[1]=-1;当i=2时,a[2]=-2;当i=3时,a[3]=-3;当i=4时,a[4]=-4;当i=5时,a[5]=-5;
printf("a[%d] = %d\n", i, a[i]);//打印a[0]=0;打印a[1]=-1;打印a[2]=-2;打印a[3]=-3;打印a[4]=-4;打印a[5]=-5;
}
return 0;
}
上面每个分号代表一次循环打印一次,我把它写在一起了,告诉你在哪里执行的

如果回答对您有帮助,请采纳

#include
int main(void)
{
//在栈上分配一个int型变量,变量名i
int i;
//在栈上分配一个int型数组,变量名a,大小5
int a[5];
//循环5次
for (i = 0; i <= 5; ++i) {
//将值-i 赋给 数组a的下标为i的元素
    //比如i = 0时,a[0]就是0,i = 1是,a[1]就是-1
a[i] = -i;
//打印 第一个%d表示将i按整数输出,第二个%d表示将a[i]按整数输出
printf("a[%d] = %d\n", i, a[i]);
}
//退出
return 0;
}

输出就是下标负数,但是主函数int,所以最好加一个return 0;

数组越界 int a[5];

楼上都说的对,有数组越界问题 for (i = 0; i <= 5; ++i) a[i] = -i。因为没有a[5],但还是能成功运行,结果就是
a[0] = 0
a[1] = -1
a[2] = -2
a[3] = -3
a[4] = -4
a[5] = -5

a[0] = 0
a[1] = -1
a[2] = -2
a[3] = -3
a[4] = -4
a[5] = -5
虽然a[5]导致数组越界,但是变量int i在数组int a[5]之前声明,即使数组越界也不会影响到i,这样a[5]仍能够正常输出。但新声明一个变量时,可能占用现在数组第六个值a[5]的内存地址,因此数组不要越界赋值。

这种数组越界的问题,发生显示任何结果都是可能的,没意义来分析啊。

  1. 典型的数组越界,数组下标从0开始,所以当i= 5时,a[5]所指向的内存地址,已经不再是数组的内存部分了。
  2. #include 是要在当前类中引用其他类时用到,包括库文件或自定义文件,这里不需要。
  3. main函数没有返回结果。 int main(void) { int a[5]; for (i = 0; i < 5; ++i) { a[i] = -i; printf("a[%d] = %d\n", i, a[i]); } return 0; }

首先是数组下标越界,最后一个数的产生是内存里的随机数。

[0] = 0
a[1] = -1
a[2] = -2
a[3] = -3
a[4] = -4
a[5] = -5

大家都发现了啊,数据越界,数组定义,规定,从下标0开始存储,默认最后一个存储空间为'\0',不能存储其他数据的

数组越界,不存在a【5】

数组越界,int a【5】实际上直到a【4】

不讨论那个越界的错误,就是 -i 就是 0-i,对数组的每个元素赋值,就是 0, -1, -2 ....

首先你的数组a[5]越界了