编程语言
首页 > 编程语言> > c primer plus第10章10.13编程练习第6题:初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组

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