c语言用for循环给二维数组赋值,请问哪里错了

#include
int main()
{

int n=1,i,j,a[3][3]={{0,0,0,},{0,0,0,},{0,0,0,}};

for(i=0;i<4;i++)

{
    a[3][i]=n;
    n++;    
}
for(j=3;j>-1;j--)
{
    a[j][3]=n;
    n++;
}
for(i=0;i<3;i++)
{
    a[0][i]=n;
    n++;    
}
for(j=0;j<3;j++)
{
    a[0][j]=n;
    n++;
}
for(i=0;i<3;i++)
{
    a[3][i]=n;
    n++;    
}
for(j=3;j>1;j--)
{
    a[j][3]=n;
    n++;
}
for(i=1;i<3;i++)
{
    a[2][i]=n;
    n++;    
}
for(j=0;j<4;j++)
{
    for(i=0;i<4;i++)
    {
        printf("%d ",a[i][j]);
    }
    printf("\n");
}
return 0;

}

1个回答

有两个问题,数组下标是从 0 开始的,长度为 3,最大下标为 2,所以会有越界异常。
参考 demo:

int n=1,i,j,a[3][3]={{0,0,0,},{0,0,0,},{0,0,0,}};
//第二行的每一列赋值
for(i=0;i<3;i++)
{
    a[2][i]=n;
    n++;    
}

//第 1 行每一列赋值
for(j=0;j<3;j++)
{
    a[1][j]=n;
    n++;
}

//第 0 行每一列赋值
for(j=0;j<3;j++)
{
    a[0][j]=n;
    n++;
}

//遍历数组
for(j=0;j<3;j++)
{
    for(i=0;i<3;i++)
    {
        printf("%d ",a[i][j]);
    }
    printf("\n");
}

代码的问题是中间重复赋值操作没有必要。

LiXenon
LiXenon 应该是复制错了,我改了下您再看看
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐