程序问题,求助

hello0world 2007-11-26 11:48:10
#include"stdio.h"
double copy_ptr(double *a,double *b,int n);
int main()
{
int i=0,j=0;
double source[][4]={{1.0,2.0,3.0,4.0},{4.0,5.0,6.0,7.0},{8.0,9.0,5.0,7.0}};
double target[][4]={0.0};
copy_ptr(source[],target[],4);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%lf",target[i][j]);
}
}
double copy_ptr(double *a,double *b,int n)
{
int i=0;
while(i<n)
{
*b++=*a++;
i++;
}
}
上面的程序要实现,把一个二维数组复制到另一个二维数组中去
我写的没法实现.高手帮忙看下,多谢了
...全文
241 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
can0707 2007-11-28
  • 打赏
  • 举报
回复
#include"stdio.h"
double copy_ptr(double *a,double *b,int n);
int main()
{
int i=0,j=0;
double source[][4]={{1.0,2.0,3.0,4.0},{4.0,5.0,6.0,7.0},{8.0,9.0,5.0,7.0}};
double target[3][4];
copy_ptr(source,target,12);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%.1lf ",target[i][j]);
printf("\n");
}
}
double copy_ptr(double *a,double *b,int n)
{
int i=0;
while(i <n)
{
*b++=*a++;
i++;
}
}
HelloDan 2007-11-28
  • 打赏
  • 举报
回复

#include <iostream>
//#include <fstream>

using namespace std;

void copy_ptr(const double (*a)[4], double (*b)[4], int n)
{
for(int i=0;i<n;++i)
{
for(int j=0;j<4;++j)
*(*(b+i)+j)=*(*(a+i)+j);
}
}

int main()
{

double source[][4] = {{1.0,2.0,3.0,4.0},
{4.0,5.0,6.0,7.0},
{8.0,9.0,5.0,7.0}};
double target[3][4];
copy_ptr(source,target, 3);

for(int i=0;i<3;++i)
{
for(int j=0;j<4;++j)
cout<<target[i][j]<<" ";
cout<<endl;
}

cout<<endl;


system("pause");
return 0;
}


后来我也发现问题了,应该是上面那样。这里的问题是还有引用,和指针在传递函数方面有不少不同。我以前看书,只是看,没试过,所以错了。
hello0world 2007-11-27
  • 打赏
  • 举报
回复
那你去睡吧
明天我再问你啊
我自己再想想吧
hello0world 2007-11-27
  • 打赏
  • 举报
回复

mu_yang 2007-11-27
  • 打赏
  • 举报
回复
"对于二维甚至多多维数组来说
除了最后一个数字是指定了数组的大小
别的都只是代表了他们各自的地址
就拿那个二维的来说吧a[3][4]
a[3]就是地址,也就是指针
那么a[3]=p
a[3][4]=(*p)[4]
"

迹近胡说.
改日再聊吧.


hello0world 2007-11-27
  • 打赏
  • 举报
回复
等下啊
我上面的问题你帮我看看啊
多看一眼啊
mu_yang 2007-11-27
  • 打赏
  • 举报
回复
那就将就吧

for ( i = 0 ; i < n ; i ++)
for ( j = 0 ; j < 4 ; j ++)
*(*(b+i)+j)=*(*(a+i)+j);


我得去睡了
这个写法不够好
主要是那个4我看不下去
有识之士会笑话的
hello0world 2007-11-27
  • 打赏
  • 举报
回复
穆兄,我还有个问题要请教下
就是关于你刚才说哪个类型的问题
double copy_ptr(double (*)[4],double (*)[4] ,int );
是不是可以这么理解呢
对于二维甚至多多维数组来说
除了最后一个数字是指定了数组的大小
别的都只是代表了他们各自的地址
就拿那个二维的来说吧a[3][4]
a[3]就是地址,也就是指针
那么a[3]=p
a[3][4]=(*p)[4]
因此他的类型就应该是type (*)[4]
我这样理解不知道对不对
hello0world 2007-11-27
  • 打赏
  • 举报
回复
不是定义数组的时候就指定了一维的大小了吗
那大小就是4啊
mu_yang 2007-11-27
  • 打赏
  • 举报
回复
18楼对
但你那个4是怎么来的
hello0world 2007-11-27
  • 打赏
  • 举报
回复
那里不对啊
mu_yang 2007-11-27
  • 打赏
  • 举报
回复

你写的不对!
hello0world 2007-11-27
  • 打赏
  • 举报
回复
for(j=0;j<4;j++)
应该是这样
hello0world 2007-11-27
  • 打赏
  • 举报
回复
最后一个错我找到了
double copy_ptr(double (*a)[4],double (*b)[4],int n)
{
int i,j;
i=0
while(i<n)
{
for(j=0;j<n;j++)
*(*(b+i)+j)=*(*(a+i)+j);
i++;
}
}
改成这样就可以了吧
还有你说改成int i;
那i=0是不是就要重新写行.
mu_yang 2007-11-27
  • 打赏
  • 举报
回复
"还有那里有错 "

呵呵,你程序总共才几行啊

剩下的估计就是写copy_ptr的函数体了
你原来的copy_ptr的函数体内的语句可以全部删除了
除了 int i=0; 那行
不过最好你改成 int i;
因为我看不惯int i=0;
hello0world 2007-11-27
  • 打赏
  • 举报
回复
哦.是啊
没考虑到,这的确是大问题
hello0world 2007-11-27
  • 打赏
  • 举报
回复
还有那里有错
mu_yang 2007-11-27
  • 打赏
  • 举报
回复
"我看书上说前面那个可以省略
所以我就省掉了"

你可以把那本书摔掉了

我也知道可以省略
但我从不省略

问题在于你知道你省略之后
double target[][4]={0.0};
是什么意思吗
mu_yang 2007-11-27
  • 打赏
  • 举报
回复
"你这个类型是怎么判断的
能解释下不"

对我来说,那是常识.
但常识不是一两天建立的
所以我也没法一两句话说清楚
hello0world 2007-11-27
  • 打赏
  • 举报
回复
我看书上说前面那个可以省略
所以我就省掉了
加载更多回复(36)

33,311

社区成员

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

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