首页 > 解决方案 > 使用指针将第一个(2D)数组的值复制到第二个的函数

问题描述

我的任务是:

在您的 main 函数中,定义并初始化一个二维双精度数组。定义(但不初始化)另一个与第一个大小相同的二维双精度数组。编写一个函数,将第一个数组的值复制到第二个数组中,这次使用指针。

我努力了:

void cpyda(double *old_array,double *new_array,int length){
    double *ptr_one=old_array;
    double *ptr_two=new_array;

    for(int i=0;i<length;i++){
        ptr_two[i]=ptr_one[i];
    }

    for(int r=0;r<2;r++){
        for(int c=0;c<3;c++){
            cout<<new_array[r][c]<<" ";
        }
        cout<<endl;
    }
}

int main(){
   double array_one[2][3]={{1,2,3},{4,5,6}};
   double array_two[2][3]={};
   cpyda(array_one,array_two, 6);
}

我不断收到的错误是:

 function-1-4.cpp: In function 'void cpyda(double*, double*, int)':
 function-1-4.cpp:14:33: error: invalid types 'double[int]' for array 
   subscript
              cout<<new_array[r][c]<<" ";
                             ^
 main-1-4.cpp: In function 'int main()':
 main-1-4.cpp:9:11: error: cannot convert 'double (*)[3]' to 'double*'
      cpyda(array_one,array_two, 6);
       ^~~~~~~~~
 main-1-4.cpp:4:27: note:   initializing argument 1 of 'void 
 cpyda(double*, double*, int)'
 extern void cpyda(double *old_array,double *new_array,int length);

标签: c++

解决方案


main()首先,我会在调用之后将数组输出代码放入cpyda(...)- 毕竟,该函数只应该进行实际的复制......

其次,如果您的函数应该“使用指针”,那么真正使用指针,而不是声明为指针的变量,然后将其视为数组......

void cpyda(double *old_array,double *new_array,int length){
    double *ptr_one=old_array;
    double *ptr_two=new_array;

    for(int i=0; i<length; i++) {
    //    ptr_two[i]=ptr_one[i];
          *ptr_two++ = *ptr_one++
    }    
 }

int main(){
   double array_one[2][3]={{1,2,3},{4,5,6}};
   double array_two[2][3]={};
   cpyda(array_one[0], array_two[0], 6);
   for (int r=0; r<2; r++) {
        for (int c=0; c<3; c++) cout << array_two[r][c] << " ";
        cout << endl;
    }
}

您还可以cpyda通过不费心将指针参数复制到本地来使函数更加简洁......</p>

void cpyda(double *old_array,double *new_array,int length){
    for (int i=0; i<length; i++) *new_array++ = *old_array++;
}

这有帮助吗?


推荐阅读