长相思兮长相忆,短相思兮无穷极。
初学,如有错误,感谢指出。
#include<stdio.h>
void fun( int (*p)[3], int n);
int main(void)
{
int a[3][3];
int i, j;
printf("输入数组:\n");
for (i = 0; i <3; i++)
for (j = 0; j < 3; j ++)
scanf_s("%d",&a[i][j]);
// 输入数组
printf("当前数组为:");
for (i = 0; i <3; i++){
printf("\n");
for (j = 0; j < 3; j ++)
printf("%3d",a[i][j]);
}
fun ( a , 3);
// 这里函数中用的是 一个指针指向一个一维数组,所以直接用数组地址作为实参
printf("\n交换后数组为:");
for (i = 0; i <3; i++){
printf("\n");
for (j = 0; j < 3; j ++)
printf("%3d",a[i][j]);
}
// 输出数组
printf("\n");
return 0;
}
void fun( int (*p)[3], int n)
{
int i, j;
int t;
for(i = 0; i < n; i++)
for(j = i; j < n; j++){
t = *(*(p + i )+ j);
// 因为这里形参为指针数组,即一个指针指向一个一维数组
// 所以用 *(*(p + i) + j) 来表示第i行j列元素
*(*(p + i)+ j) = *(*(p + j) + i);
// 数组转置
*(*(p + j) + i) = t;
}
}