使用指针将一个数组复制到另一个数组

时间:2015-08-23 12:42:23

标签: c++ arrays pointers

我必须使用指针将一个数组的值复制到另一个数组。问题是我不允许使用'[]'运算符,这对我来说更难。这是我的尝试:

#include <iostream>
using namespace std;

void cpyia(int old_array[],int new_array[],int length){

int *p1 = old_array;

int *p2 = new_array;

int *x = p2;

for(int i=0 ; i<length ; i++){

    p2 = x;
    p2 = p2 + i;        
        p2 = p1 + i;
}

for(int i=0; i<5; ++i){
     cout << p2[i] << endl;
}

}

  int main() {


int a[5]={1,2,3,4,5};

int b[5];

cpyia(a, b, 5);


}

更简单的方法是将p2 [i] = p1 [i]放入循环中,但我无法做到这一点。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

实现您的功能的标准方法如下:

for(int i = 0; i < length; ++i)
    *new_array++ = *old_array++;

更明确一点,它与:

相同
void cpyia(int old_array[],int new_array[],int length){
    int *p1 = old_array;
    int *p2 = new_array;

    for(int i=0 ; i<length ; i++){
        *(p2+i) = *(p1+i);
        // another way: *(p2++) = *(p1++);
    }
}

答案 1 :(得分:2)

在实际代码中,您甚至可以在考虑自己重写这么简单的事情之前使用std::copy

这是一个完整的例子:

#include <iostream>
#include <algorithm>

void cpyia(int old_array[],int new_array[],int length){
    std::copy(old_array, old_array + length, new_array);
}

int main() {
    int a[5]={1,2,3,4,5};
    int b[5];

    cpyia(a, b, 5);

    // test results:
    for (int index = 0; index < 5; ++index)
    {
        std::cout << a[index] << " <-> " << b[index] << "\n";
    }
}

然而,你的问题是你“不允许使用”的东西,这听起来很像家庭作业。在这种情况下,您可以查看possible implementations of std::copy以了解如何执行此操作。这是一种方式:

void cpyia(int old_array[],int new_array[],int length){
    int* first = old_array;
    int* last = old_array + length;
    int* d_first = new_array;

    while (first != last) {
        *d_first++ = *first++;
    }
}

答案 2 :(得分:0)

#include<iostream>
using namespace std;

int main() {

const int size = 5;
int arr1[size] = { 4,21,43,9,77 };
int arr2[size];

int *ptr_a = arr1;
int *ptr_b = arr2;
for (int i = 0; i < size; i++)
{
*(ptr_b + i) = *(ptr_a + i);
cout << *(ptr_b + i) << " ";

}
}