C语言:写一函数 将一个3x3的整型矩阵转置

下面是我的代码错误为:('&' requires l-value)
我的思路:定义两个二维数组,用指针的方法将列元素赋值给对应的行元素,然后第二列再赋第二行以此列推
# include <stdio.h>
int main ()
{
void zhuanzhi (int (*p)[3]);
int a[3][3],i,j;
int (*p)[3];
printf("请输入一个二维矩阵:\n");
for (i = 0;i < 3;i++)
for (j = 0;j < 3;j++)
scanf("%d",&a[i][j]);
p = a;
zhuanzhi (p);
printf("转置后的矩阵:\n");
for (i = 0;i < 3;i++)
{
for (j = 0;j < 3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
void zhuanzhi (int (*p)[3])
{
int i,j,s = 1,g = 0;
int (*z)[3];
z = p;
for (i = 0;i < 3;i++,s++)
{
for (j = 0;j < 3;j++)
* (z[i] + j) = *(*(p + j));
p = & (p[g] + s);
}
}

怎么改?我p = & (p[g] + s)的意图是将先将行指针转换成列指针加1,即把列往后移一个,然后谭浩强不是说列指针转换成行指针加&,行指针转换成列指针加*,所以我就把&当成*一样用了,结果就错误了怎么改?第二请大神再看看代码还有什么错误,一并改正谢谢

#include <stdio.h>

const int N = 3;

int main() {
void zhuanzhi (int (*p)[N]);
int a[N][N],i,j;
int (*p)[N];
printf("请输入一个二维矩阵:\n");
for(i = 0;i < N;i++)
for (j = 0;j < N;j++)
scanf("%d",&a[i][j]);
p = a;
zhuanzhi (p);
printf("转置后的矩阵:\n");
for(i = 0;i < N;i++) {
for(j = 0;j < N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}

void zhuanzhi (int (*p)[N]) {
int i,j,t;
for(i = 0;i < N;i++) {
for(j = i;j < N;j++) {
t = *(*(p + i) + j);
*(*(p + i) + j) = *(*(p + j) + i);
*(*(p + j) + i) = t;
}
}
}

追问

请问p = & (p[g] + s);为什么错

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网