将一个3×3的数组转置,为什么运行不出来

include<stdio.h>

int main()
{void move(int* pointer);
int a[3][3],i,*p;
printf("input");
for(i=0;i<3;i++)
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("now:\n");
for(i=0;i<3;i++)
printf("%d%d%d\n",&a[i][0],&a[i][1],&a[i][2]);

return 0;
}
void move(int* pointer)
{int i,j,t;
for(i=0;i<3;i++)
{for(j=i;j<3;j++)
{t=((pointer+i)+j);
((pointer+i)+j)=((pointer+j)+i);
((pointer+j)+i)=t;
}}}

int main()
{void move(int* pointer);
int a[3][3],i,*p;
printf("input");
for(i=0;i<3;i++)
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("now:\n");
for(i=0;i<3;i++)
printf("%d%d%d\n",&a[i][0],&a[i][1],&a[i][2]);//打印的时候不需要加取地址符

return 0;
}
void move(int* pointer)
{int i,j,t;
for(i=0;i<3;i++)
{for(j=i;j<3;j++)
{t=((pointer+i)+j);
((pointer+i)+j)=((pointer+j)+i);//这两个地址是一样的,换来换去还是没得换;其次要交换的是指向的数据,应该解引用;
((pointer+j)+i)=t;
}}}
下面是修改之后的

#include<stdio.h>

void move(int* pointer,int row)
{
    int i, j, t;
    for (i = 0; i < 3; i++)
    {
        for (j = i; j < 3; j++)
        {
            if (i == j)
            {
                continue;
            }
            else
            {
                t = *(pointer +i*row+j) ;
                *(pointer+i*row+j)= *(pointer+j*row+i);
                *(pointer + j * row + i) = t;
            }
        }
    }
}

int main()
{
    int a[3][3], i, * p,row;
    row = 3;//每行的数据个数
    printf("input:\n");
    
    for (i = 0; i < 3; i++)
        scanf_s("%d %d %d", &a[i][0], &a[i][1], &a[i][2],4,4,4);
    p = &a[0][0];
    move(p,row);
    printf("now:\n");
    for (i = 0; i < 3; i++)
        printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);

    return 0;
}