还是一个指针问题,不好意思

sandberg0411 2005-01-24 04:02:23
写一函数,将一个3*3的矩阵转置,用指针方法处理
void zz(int (*p)[3],int n)
{int i,j,t;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{t=*(*(p+i)+j);
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=t;}}
#include <stdio.h>
void main()
{int array[3][3],i,j;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&array[i][j]);
zz(array,3);
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("%d ",array[i][j]);}
...全文
245 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongpy 2005-03-02
  • 打赏
  • 举报
回复
读array[i][j]应该使用 *(array+i*(第一维的大小)+j)
=======================================================
不对,array[i][j]和*(*(array+i)+j)是等价的,用不着*(第一维的大小)
Flood1984 2005-03-01
  • 打赏
  • 举报
回复
读array[i][j]应该使用 *(array+i*(第一维的大小)+j)
Flood1984 2005-03-01
  • 打赏
  • 举报
回复
t=*(*(p+i)+j);
这种用法是错误的:
p是一个二维数组名,
p+i是地址,
*(p+i)是地址中的值,
*(p+i)+j 值+偏移量,//这没意义
*(*(p+i)+j); //这就更读到非法空间了
waterinsunny 2005-02-25
  • 打赏
  • 举报
回复
up
mengxiangfengwz 2005-02-25
  • 打赏
  • 举报
回复
应该是吧
kobefly 2005-01-24
  • 打赏
  • 举报
回复
#include <stdio.h>
void zz(int (*p)[3],int 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;
}
}

void main()
{
int array[3][3],i,j;

for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&array[i][j]);
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("%d ",array[i][j]);
zz(array,3);
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("%d ",array[i][j]);
}
kobefly 2005-01-24
  • 打赏
  • 举报
回复

错了
是你的转置算法不对

kobefly 2005-01-24
  • 打赏
  • 举报
回复
我没试

看样子是函数的传入参数不匹配吧
zhousqy 2005-01-24
  • 打赏
  • 举报
回复
什么问题?
daylove 2005-01-24
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3142/3142075.xml?temp=.2990381

看看。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧