我想我明白你在问什么。您可以使用指针来设置您的第二个数组,但这样做的问题是:
int [] primary = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int * secondary = primary + 5;
此时primary是{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},secondary是{6, 7, 8, 9, 0},但问题是它们都指向到内存中的同一个数组。因此,如果您编辑“次要”的任何元素,而不是拥有两个独立的副本,它们也会在“主要”中进行编辑。
secondary[2] = 10;
for(int i = 0; i < 10; ++i)
cout << primary[i] << ' ';
这部分代码现在将产生: 1 2 3 4 5 6 7 10 9 0
正确的方法是要么设置新数组,然后循环复制值,要么使用memcpy()。
编辑:
//Rotate an array such that the index value is moved to the front of the array
null rotateArray( &int original[], int size, int index)
{
int * secondary = new int[size]; //dynamically allocated array
for(int i = 0; i < size; ++i)
{
secondary[i] = original[(i+index)%size];
}
original = secondary; //Move the original array's pointer to the new memory location
}
一些注意事项:
secondary[i] = original[(i+index)%size];
这就是我旋转阵列的方式。假设您有一个大小为 5 的原始数组,并且您希望第四个元素成为新的开始(请记住,元素编号为 0-(size-1)):
我 = 0;
次要[0] = 原始[(0 + 3)%5]// = 原始[3]
我 = 1;
次要[1] = 原始[(1 + 3)%5]// = 原始[4]
我 = 2;
次要[2] = 原始[(2 + 3)%5]// = 原始[0]
...
代码的最后一部分:
original = secondary;
有点可疑,因为我不记得一旦函数退出,c++ 是否会尝试清理使用的内存。一种更安全且 100% 确定的方法是循环遍历辅助数组的元素并将其复制到原始数组中:
for(int i = 0; i < size; ++i)
original[i] = secondary[i];