首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针变量于二维数组的迷惑

2013-03-29 
指针变量于二维数组的疑惑#includestdio.hvoid transpose_matrix(int *p,int n){int i,j,tfor(i0in

指针变量于二维数组的疑惑
#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; 

楼主可以单步调试下,看看各变量值的变化情况就容易理解了
一步一步来(第一轮for循环):
第一行,把二维数组a[0][0]的值赋值给临时变量t;
第二行,把二维数组a[2][2]的值赋给a[0][0];
第三行,把临时变量t的值赋给a[2][2],这三行就达到了a[0][0]与a[2][2]的转置

返回第二轮循环...
[解决办法]
表示一个i*j矩阵的对角交换。将第i行第j个的值,与第j行第i个的值进行交换。
如 1 2 3      1 4 7
   4 5 6 ---> 2 5 8
   7 8 9      3 6 9 其中j>=i+1是避免了 i=j的数据交换(如  1 5 9)
[解决办法]
引用:

    t=p[i*n+j];
    p[i*n+j]=p[j*n+i];
    p[j*n+i]=t; 

楼主可以单步调试下,看看各变量值的变化情况就容易理解了
一步一步来(第一轮for循环):
第一行,把二维数组a[0][0]的值赋值给临时变量t;
第二行,把二维数组a[2][2]的值赋给a[0][0];
第三行,把临时变量t的值赋给a[2][2],这三行就达到了a[0][0]与a[2][2]的转置

返回第二轮循环...


取个特殊值理解一下很好懂的   

热点排行