底下程序为何不对呢?

下面程序为何不对呢????int a[3][2] {0},(*ptr)[2],i,jfor(int i 0i3i++){ptr a + ifor(int j

下面程序为何不对呢????


int a[3][2] = {0},(*ptr)[2],i,j;
for(int i = 0;i<3;i++)
{
ptr = a + i;
for(int j = 0;j<2;j++)
{

scanf("%d",ptr[i][j]);
//ptr++;
}
}
for(int i=0;i<3;i++)
{
for(j=0;i<2;j++)
printf("%d",a[i][j]);
printf("\n");
}

[解决办法]
还有几个错误没注意到:scanf要求的是数据指针,下面的输出循环中的内层循环应该是j<2耐而不是i<2。所以应该是:

    int a[3][2] = {0},(*ptr)[2],i,j;
    for(i = 0; i<3; i++)
    {
        ptr = a + i;
        for(int j = 0; j<2; j++)
        {

            scanf("%d",*ptr+j);
            //scanf("%d",ptr[0]+j);
            //scanf("%d",&ptr[0][j]);
            //scanf("%d",&(*ptr)[j]);
            //上面四个喜欢哪个用哪个
        }
    }
    for(int i=0; i<3; i++)
    {
        for(j=0; j<2; j++)
            printf("%d",a[i][j]);
        printf("\n");
    }


其实还有一种方法更常见:


    int a[3][2] = {0},*ptr;//这里就用int*,不用数组指针
    int i,j;
    ptr = &a[0][0];
    for(int i = 0; i<3; i++)
    {
        for(int j = 0; j<2; j++)
        {



            scanf("%d",ptr++);
        }
    }