【发布时间】:2021-03-18 02:22:45
【问题描述】:
所以我的目标是将两个数组连接在一起,并在数组的开头插入新数组的新大小。例如如果
Arr1 = {5, 1,2,3,4}
and Arr2 = {5, 10, 20, 30, 40 };
NewArr = { 11, 5, 1, 2, 3, 4, 5, 10, 20, 30, 40 }
但是,当我运行我的代码时,我得到了
NewArr = {11 1 2 3 4 10 20 30 40 -12851 -12851}
看起来我丢失了两个数组中的第一个元素。这是我的代码。
short int* ConcatArray(short int* a1, short int* a2) {
//size of array 1
int n = *(a1 + 0);
//size of array 2
int m = *(a2 + 0);
int i;
int size = n + m;
short int* newArr = new short int[n + m];
// increase the size by 1
size++;
// shift elements forward
for (i = size; i >= 1; i--)
*(newArr + i) = *(newArr + i - 1);
// insert x at pos
*(newArr + 1 - 1) = size;
// Create new Array
for (i = 1; i < n; i++) {
*(newArr + i) = *(a1 + i);
}
for (int j = 1; j < m; j++, i++) {
*(newArr + i) = *(a2 + j);
}
return newArr;
}
【问题讨论】:
-
您分配了一个大小为
n + m的数组,但您对顶部for的第一次迭代访问了n + m + 1(相差2)。顺便说一句,我建议放弃指针算法,只使用数组访问。 -
你为什么写
*(a1 + 0)这样的代码而不是a1[0]?我知道它是有效的,因为这些是数组,所以使用更清晰的数组语法。 “向前移动元素”循环没有意义,它是一个新分配的数组,没有什么可以“移动”的。 -
我必须为这个赋值使用指针和指针算法
-
我不只是将元素复制到新数组中,我还必须在新数组的前面添加一个新元素,即新数组的大小。我会试试你的想法@Xenikh
-
最终数组不应该是
{9, 1, 2, 3, 4, 10, 20, 30, 40}吗?每个源数组的第一个元素是数组大小(正确吗?),因此您不想将这些值复制到最终数组。