c语言数组的运行顺序

#include<stdio.h>
main(){
    int i,a[3],j,k;
    for(i=0;i<3;i++)
    a[i]=0;
    k=2;
    for(i=0;i<k;i++)
    for(j=0;j<k;j++)
    a[j]=a[i]+1;
    printf("%d",a[1]);}

请问这个程序最后输出的值为什么是3,a[1]赋的值不应该是0吗?

#include<stdio.h>
void main(){
    int i,a[3],j,k;
    for(i=0;i<3;i++)
    {
        a[i]=0;
    }
    k=2;
    for(i=0;i<k;i++){
        for(j=0;j<k;j++){
            a[j]=a[i]+1;
        }
    }
    printf("%d",a[1]);
 }

加上每个for循环块的范围这样不知道你能不能看明白程序的运行顺序


#include <stdio.h>
main() {
    int i, a[3], j, k;

    // 下面for循环只管一句a[i] = 0;
    for (i = 0; i < 3; i++)
        a[i] = 0;

    // 上面for循环结束后将k赋值
    k = 2;
    // 下面是两层循环
    for (i = 0; i < k; i++)
        for (j = 0; j < k; j++)
        // 这两层循环对a[j]做操作
            a[j] = a[i] + 1;

    // 最后打印a[1]
    printf("%d", a[1]);
}

供参考:

#include<stdio.h>
int main(){
    int i,a[3],j,k;
    for(i=0;i<3;i++)//将数组a[]元素循环初始化为0
       a[i]=0;      //a[0] = 0, a[1] = 0, a[2] = 0
    k=2;
    for(i=0;i<k;i++)
       for(j=0;j<k;j++){
           a[j]=a[i]+1;
       }
    printf("%d",a[1]);
    return 0;
}
#if0
    k=2;
    for(i=0;i<k;i++) i = 0 --- 1
       for(j=0;j<k;j++) j = 0 ---- 1
数组变化:
a[j=0]=1: a[i=0]= 0 + 1 ===> a[j=i=0] = 1
a[j=1]=2: a[i=0]= 1 + 1 ===> a[j = 1] = 2, a[i = 0] = 1
a[j=0]=3: a[i=1]= 2 + 1 ===> a[j = 0] = 3, a[i = 1] = 2
a[j=1]=3: a[i=1]= 2 + 1 ===> a[j=i=1] = 3

循环结束数组元素值:a[0] = 3 ,a[1] = 3 ,a[2] = 0;

最终输出:a[1]=3请按任意键继续. . .
#endif


可以看下c语言参考手册中的 c语言-数组

i=1时候,a1=0+1
i=2的时候,a 1=a 1+1+1=3

最简单的,我问你
for(i=0;i<k;i++)
for(j=0;j<k;j++)
a[j]=a[i]+1;

当i = 0, j = 0 时,a[j] = a[i] +1;那么a[0] 现在变成几了?
当i = 1,j = 0呢?