#include <stdio.h>
#define N 10
void Transpose(int a[][N],int n)
{
int i,j,b[N][N];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
b[i][j]=a[j][i];
}
}
printf("\n转置后的矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]=b[i][j]);
}
printf("\n");
}
}
int main()
{
int a[N][N],n;
printf("输入转置矩阵的n=");
scanf("%d",&n);
printf("请输入一个%dx%d的矩阵\n" ,n,n);
Transpose(a,n);
return 0;
}
这个是对的 请帮忙用指针的方式改一下
void Transpose(int (*a)[N],int n)一个这样
void Transpose(int *a,int n)一个是这样
多谢大神
形参int (*a)[N]和int a[][N]在编译时都被解释为“a是指向长度为N的一维数组的指针”,所以函数体内的操作可以二者完全一样。就是说如果你这个函数是正确的的话,把第一个形参改为int (*a)[N],其余不变就是完全正确的。所以这没有什么新的意义,这里就不费笔墨了。至于改为形参int *a,那得稍费周折,因为int *a是个一级指针,不能接受二维数组的全部信息,要在函数中作点预处理;调用的地方也要做点处理。举例如下:
#include "stdio.h"怎么让用指针的时候用到 *(*(a+i)+j) 这种形式呢 谢谢
追答改一下就是了,因为类似p[i][j]和*(*(p+i)+j)是完全对等的:
#define N 10