我必须使用指针将一个数组的值复制到另一个数组。问题是我不允许使用'[]'运算符,这对我来说更难。这是我的尝试:
#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]放入循环中,但我无法做到这一点。任何帮助表示赞赏。
答案 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) << " ";
}
}