c primer plus第10章10.13编程练习第6题:初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组
作者:互联网
题目
编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的函数来复制数组的每个子数组)。
解答
第一个思路,是想创建两个指向(COLS个double值的数组)的指针,然后让新的指针指向原数组的指针,整体复制,发现不能这么操作,不知道为什么。
void copy_arr(double *p,double *np,int length){
while (length > 0) {
np = p;
np ++;
p++;
length --;
}
}
于是只好用第二个思路,将p的值赋给np的值,也就是 复制数组[0][0] = 原数组[0][0],这里的length是数组总的元素个数。array[4][4],就是16个元素。相当于,把二维数组一维化,将4行4列的二维数组看成16个元素的一维数组,进行处理。
代码
#include "stdio.h"
void copy_arr(double *p,double *np,int length);
int main(void){
double array[4][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
double copy_array[4][4];
double *ptr1 = array[0];
double *ptr2 = copy_array[0];
int i,j;
copy_arr(ptr1 , ptr2 , 16);
for(i=0 ; i<4 ; i++){
for (j=0; j<4; j++) {
printf("%.2f ",copy_array[i][j]);
}
printf("\n");
}
return 0;
}
void copy_arr(double *p,double *np,int length){
while (length > 0) {
*np = *p;
np ++;
p++;
length --;
}
}
标签:一个二维,double,练习,length,数组,np,array,copy 来源: https://blog.csdn.net/chao_xiaoZE/article/details/113371868