学习嘛,当然多学一点是一点拉
I love you not because of who you are, but because of who I am when I am with you!
#include <stdio.h> void fun (int x[3][3]) { int i,j,temp; for(i=0;i<3-1;i++) { for(j=i+1;j<3;j++) { temp=x[i][j]; x[i][j]=x[j][i]; x[j][i]=temp; printf("%d\t",x[i][j]); } printf("\n"); }
void main() { int i,j,x[3][3]; for (i=0;i<3;i++) { for(j=0;j<3;j++) scanf ("%d",&x[i][j]); } fun(x); }
这样应该可以吧 不过有个错误我找不到
请高手指点下
小弟我也来写一个啦,望大家指点一下咯
#include<stdio.h> #define M 3 #define N 3 void Tarray(int (*p)[N]);
void main() { int i,j,a[M][N] = { 1,2,3, 4,5,6, 7,8,9 }; for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%d ",a[i][j]); printf("\n"); } Tarray(a); printf("\n\nAfter transfer the array is:\n\n"); for(i=0;i<N;i++) { for(j=0;j<M;j++) { printf("%d ",a[i][j]); } printf("\n"); } }
void Tarray(int (*p)[N]) { int iCount,jCount,temp; for(iCount=0;iCount<M;iCount++) { for(jCount=iCount;jCount<N;jCount++) { temp=*(*(p + iCount) + jCount); *(*(p + iCount) + jCount) = *(*(p + jCount) + iCount); *(*(p + jCount) + iCount) = temp; } } }
首先,需要明白的是数组指的是静态的,他们在内存中是连续的,无论是一维还是多维数组都是这样。那么强制转换x为指向整形的指针,这样做是为了x+i时表示是指向第i个整形的指针。而不是其他类型的。比如说(char *)x+i;那么它表示的是以x为首地址的指向第i个字符型的指针。按照多维数组在计算机内存中的连续排序规律那么,x[i][j]的地址,不就是 第i*n+j个吗即地址=(int *)x+i*n+j;
[/QUOTE]明白了