我编写了一个程序,将数组划分为两个新数组,但由于某种原因,原始数组的元素正在发生变化.C++



我不明白为什么我的原始数组,即arr[]会发生变化(按照数字的顺序变化,最后四个元素变成前四个(,请解释为什么即使我没有将其分配到任何位置,也会发生这种情况。

#include <iostream>
using namespace std;
int main()
{
int arr[] {5,4,1,8,7,2,6,3};
int numberOfElements=8; //sizeof(arr)/sizeof(arr[0])
int array1[]{};
int array2[]{};
for(int i=0;i<=(numberOfElements/2)-1;i++){
array1[i]=arr[i];
array2[i]=arr[i+4];
}
return 0;
}

它被称为未定义的行为。你不小心重写了没有分配给你的数组的内存

array1[i]=arr[i];
array2[i]=arr[i+4];

#include <iostream>
using namespace std;
int main()
{
int arr[] {5,4,1,8,7,2,6,3};
int numberOfElements=8;
int array1[]{};
int array2[]{};
int i=0;
while(i<numberOfElements){
cout << arr[0];
if(i > 3){
array2[i]=arr[i];
}else{
array1[i]=arr[i];
}
i++;
}
return 0;
}

最新更新