1

我想将 2 个数组合并为 1 个。例如:

  • A1= 1,1
  • A2= 2,2
  • 那么 A3 = 1,2,1,2

例如:

  • A1= 1
  • A2= 2,2,2,2
  • 那么 A3 = 1,2,2,2,2

例如:

  • A1= 1,1,1,1
  • A2= 2,2
  • 那么 A3 = 1,2,1,2,1,1

在上一个示例中,当我运行我的代码时,我得到了 1,2,1,2,1,20。

在倒数第二个,我得到了 1,2,32767,2,2。

所以我想我有一个错误的代码。就在我完成了较短数组的元素并用较长的数组填充 A3 的所有其余部分之后。但我不知道为什么——你能帮帮我吗?

代码:

int *p3=arr3;   //arr3 is A3 for example, arr1 = A1..etc, all sizes are defined
int index;
int index1=0;
int index2=0;

for(index = 0; index< sizeofArr3 ; index++)
{
    if(index%2==0)
    {
        if(index1<=sizeofArr1)
            *(p3++) = arr1[index1++];
        else
            *(p3++) = arr2[index2++];
    }
    else 
    {
        if(index2<=sizeofArr2)
            *(p3++) = arr2[index2++];
        else
            *(p3++) = arr1[index1++];
    }
}
4

3 回答 3

3

就是这一行:

if (index1 <= sizeofArr1)

和 的等价index2sizeofArr2。您应该使用<而不是<=.

原因与 C 的从零开始的数组有关。对于 size 的数组N,元素索引是0直通 的N-1。因为您允许它访问元素N(第N+1th 元素),所以您实际上是在调用未定义的行为。

从理论上讲,在这种情况下,实现可以做任何事情,包括毁灭宇宙。我猜你很幸运,它刚刚决定给你的结果有点不对劲:-)

于 2012-04-08T02:44:32.407 回答
2

<= sizeOfArr1 and 2 实际上应该是 < sizeOfArr1 and 2 吗?你是如何计算你的尺寸的?

于 2012-04-08T02:47:51.073 回答
1

循环中的测试应该是:

if (index1 < sizeofArr1)

使用<而不是<=,假设sizeofArr1是数组中元素数量的计数,而不是数组中的最大有效索引。当数组长度相同时,这种差异无关紧要(所以第一个序列是可以的),但是当数组长度不同时,它就很重要了。

于 2012-04-08T02:47:45.417 回答