主题:用函数复制二维数组???
题目我全抄出来,如下:
编写一个程序,初始化一个二维数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每一个子数组)
先贴上题目中所说的练习2的函数,功能就是把一个数组的内容传给函数,在函数中又把内容赋给主调函数中定义的一个同样类型的数组,就是出题作者所说的“复制”。说实话,对于这种题目,我很无语,但不做不行,既是作业又为了考量自己的掌握程度,
void copy_arr(double source[], double target1[], int n) // 使用数组符号
{
int i;
for(i = 0; i < n; i++)
target1[i] = source[i];
return ;
}
另说明一下,这个所谓的练习2其实也是复制数组内容,但是呢,操作的对象是一维数组,用两种方法,一个函数用数组符号,就[]。另一个用指针符号,*。我随便选的一个函数,后来,做到练习6,书要求用练习2的函数做嘛,我看题的意思,最让我纠结的一句话就是
“并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每一个子数组)”
看起来,并不让修改那个函数来做题,我写出代码,结果不尽如人意,代码如下:
#include <stdio.h>
#define FIVE 5
void copy_arr(double source[], double target1[], int n);
int main(void)
{
double source[FIVE][FIVE] = {
{1.10, 1.11, 1.12, 1.13, 1.14},
{2.20, 2.21, 2.22, 2.23, 2.24},
{3.30, 3.31, 3.32, 3.33, 3.34},
{4.40, 4.41, 4.42, 4.43, 4.44},
{5.50, 5.51, 5.52, 5.53, 5.55}};
double target1[FIVE][FIVE];
copy_arr(source[0], target1[0], FIVE);
printf("source %.2f\n", source[3][0]);
printf("%.2f\n", target1[3][0]); // 查验结果
getch();
return 0;
}
void copy_arr(double source[], double target1[], int n) // 使用数组符号
{
int i;
for(i = 0; i < n; i++)
target1[i] = source[i];
return ;
}
target1数组只有前5个元素被赋值为source数组同样的元素里同样的数据。。。而其它元素被自动默认为0了,这不是我想要的结果。
这样子说我是想说明什么呢?是不是我看题看错了?题目其实是可以改函数的,我却理解成在不能改函数的情况下进行编程,可以改这题我可以做出来。
又或者,我没看错题,确实不能改函数,但是我的水平问题,代码有问题,所以,我来求助了。一开始,我看题就简单的认为,main中的两个数组,改为二维数组,函数不用改,这么一套就行了,后来,想想类型不对,就改了函数调用部分,因为我是直接从练习2复制那个函数代码到新文件里,出现Warning,我就改写了函数调用部分,加了[0],警告消失了,结果仍然不对。
怎么都好吧,由于对指针和数组的一知半解,产生这个问题,我应该怪那个作者说“处理一维数组的函数也能处理二维数组”吗?有点迷茫,求人指点迷津,谢谢。
我是不是有点傻。。。
编写一个程序,初始化一个二维数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每一个子数组)
先贴上题目中所说的练习2的函数,功能就是把一个数组的内容传给函数,在函数中又把内容赋给主调函数中定义的一个同样类型的数组,就是出题作者所说的“复制”。说实话,对于这种题目,我很无语,但不做不行,既是作业又为了考量自己的掌握程度,
void copy_arr(double source[], double target1[], int n) // 使用数组符号
{
int i;
for(i = 0; i < n; i++)
target1[i] = source[i];
return ;
}
另说明一下,这个所谓的练习2其实也是复制数组内容,但是呢,操作的对象是一维数组,用两种方法,一个函数用数组符号,就[]。另一个用指针符号,*。我随便选的一个函数,后来,做到练习6,书要求用练习2的函数做嘛,我看题的意思,最让我纠结的一句话就是
“并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每一个子数组)”
看起来,并不让修改那个函数来做题,我写出代码,结果不尽如人意,代码如下:
#include <stdio.h>
#define FIVE 5
void copy_arr(double source[], double target1[], int n);
int main(void)
{
double source[FIVE][FIVE] = {
{1.10, 1.11, 1.12, 1.13, 1.14},
{2.20, 2.21, 2.22, 2.23, 2.24},
{3.30, 3.31, 3.32, 3.33, 3.34},
{4.40, 4.41, 4.42, 4.43, 4.44},
{5.50, 5.51, 5.52, 5.53, 5.55}};
double target1[FIVE][FIVE];
copy_arr(source[0], target1[0], FIVE);
printf("source %.2f\n", source[3][0]);
printf("%.2f\n", target1[3][0]); // 查验结果
getch();
return 0;
}
void copy_arr(double source[], double target1[], int n) // 使用数组符号
{
int i;
for(i = 0; i < n; i++)
target1[i] = source[i];
return ;
}
target1数组只有前5个元素被赋值为source数组同样的元素里同样的数据。。。而其它元素被自动默认为0了,这不是我想要的结果。
这样子说我是想说明什么呢?是不是我看题看错了?题目其实是可以改函数的,我却理解成在不能改函数的情况下进行编程,可以改这题我可以做出来。
又或者,我没看错题,确实不能改函数,但是我的水平问题,代码有问题,所以,我来求助了。一开始,我看题就简单的认为,main中的两个数组,改为二维数组,函数不用改,这么一套就行了,后来,想想类型不对,就改了函数调用部分,因为我是直接从练习2复制那个函数代码到新文件里,出现Warning,我就改写了函数调用部分,加了[0],警告消失了,结果仍然不对。
怎么都好吧,由于对指针和数组的一知半解,产生这个问题,我应该怪那个作者说“处理一维数组的函数也能处理二维数组”吗?有点迷茫,求人指点迷津,谢谢。
我是不是有点傻。。。