1. 程式人生 > >指標轉置二維陣列

指標轉置二維陣列

轉置實現二維陣列行列互換

第一種方法:比較簡單,用指向矩陣的陣列指標表示二維陣列

#include <stdio.h>
main()
{
	int t,a[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{1,5,6,0}};
	int (*p)[4],i,j;
	p=a;
	for (i=0;i<3;i++)
		for (j=i+1;j<4;j++)
		{
			t=p[i][j];
			p[i][j]=p[j][i];
			p[j][i]=t;
		}
		for (i=0;i<4;i++)
		{
			for (j=0;j<4;j++)
				printf("%d",p[i][j]);
			printf("\n");
		}
}
方法2:用p-a,達到取代i的效果
#include <stdio.h>
main()
{
	int t,a[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{1,5,6,0}};
	int (*p)[4],i,j,x;
	p=a;
	for (p;p<a+4;p++)
	{
		x=p-a;
		for (j=x+1;j<4;j++)
		{
			t=a[x][j];
			a[x][j]=a[j][x];
			a[j][x]=t;
		}
	}
		for (i=0;i<4;i++)
		{
			for (j=0;j<4;j++)
				printf("%d",a[i][j]);
			printf("\n");
		}
}
方法3:
#include <stdio.h>
main()
{
	int t,a[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{1,5,6,0}};
	int (*p)[4],i,j,x;
	p=a;
	for (p;p<a+4;p++)
	{
		x=p-a;  //相當於i
		for (j=x+1;j<4;j++)
		{
			t=*(*p+j);  //相當於t=a[i][j]
			*(*p+j)=*(*(a+j)+x); //相當於a[i][j]=a[j][i]
		    *(*(a+j)+x)=t;  
		}
	}
		for (i=0;i<4;i++)
		{
			for (j=0;j<4;j++)
				printf("%d",a[i][j]);
			printf("\n");
		}
}