回复 10楼 九转星河
麻烦一下,我有点想不通为什么不能写&a[0][0]+n*n而要写&a[0][0]+9,n为3时两者不是相同的吗
[此贴子已经被作者于2016-11-19 23:54编辑过]
/*如何申请一个内存连续空间的动态二维数组*/ #include<stdio.h> #include<stdlib.h> void transpose(int *p,int n)//矩阵置换函数 { int i,j,t; for (i=0;i<n;i++) for (j=i;j<n;j++) { t=*(p+i*n+j); *(p+i*n+j)=*(p+j*n+i); *(p+j*n+i)=t; } } int main() { int **a; int i,j,n; int *p; scanf("%d",&n); a=(int **)malloc(n*sizeof(int));//为a申请一个储存*a的动态储存空间,返回值为(int**)型 *a=(int *)malloc(n*n*sizeof(int));//为*a申请一个动态储存空间,返回值为(int*)型~ p=&a[0][0];//p指向a[0][0]的地址 for (i=0;i<n;i++) a[i]=(a[0]+i*n);//这步是关键,重新分分配a[]指向的地址~ for (i=0;i<n;i++) for (j=0;j<n;j++) scanf("%d",&a[i][j]); transpose(p,n); printf("\n"); for (p=&a[0][0];p<&a[0][0]+n*n;p++) { printf("%d ",*p); if ((int)(p-&a[0][0])%n==n-1) printf("\n"); } return 0; }