指针变量于二维数组的疑惑
#include<stdio.h>
void transpose_matrix(int *p,int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
t=p[i*n+j];
p[i*n+j]=p[j*n+i];
p[j*n+i]=t;}
}
int main()
{
int i,j,a[3][3];
printf("\n input a:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
transpose_matrix(*a,3);
for(i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
}
printf("\n");
return 0;
}
如上,程序是要利用指针来转置一个3*3的方阵,上面黑体部分不明白啊,求哪位大神指教啊 c语言??指针
[解决办法]
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
t=p[i*n+j];//假设i = 0,n = 3, j = 1时,i*n + j = 1;
p[i*n+j]=p[j*n+i];//j*n + i = 3,二维数组的内存是连续分布的,所以刚好是p[0][1]和p[1][0]进行交换
p[j*n+i]=t;
}
}
t=p[i*n+j];
p[i*n+j]=p[j*n+i];
p[j*n+i]=t;