【发布时间】:2021-11-17 05:17:02
【问题描述】:
void reverseArray(int arrayLength, int sequence[]){
int temparr[arrayLength];
int *pointStart = sequence;
int *pointEnd = sequence + arrayLength - 1;
for(int i = 0; i < arrayLength; i++){
temparr[i] = *pointEnd - i;
}
for(int i = 0; i < arrayLength; i++){
sequence[i] = temparr[i];
}
}
void printArray(int arrayLength, int sequence[]){
for(int i = 0; i < arrayLength; i++, sequence++){
std::cout << *sequence << " ";
}
std::cout << "\n";
}
int main(int argc, char **argv) {
const int num = 50;
int arr[num];
for (int i = 0; i < num; i++){
arr[i] = i;
}
reverseArray(num, arr);
std::cout << "Printing reverse array...\n";
printArray(num, arr);
reverseArray(num, arr);
std::cout << "Printing reverse of the reverse array...\n";
printArray(num, arr);
ASSERT_EQ(0, arr[0]);
ASSERT_EQ(24, arr[24]);
ASSERT_EQ(49, arr[49]);
return 0;
}
我能够反转数组,但是当我将“反转”数组放回函数时,它似乎是负元素。我不确定这发生在哪里......任何事情都会有所帮助!单元测试不是问题,但它是代码的一部分。 [1]:https://i.stack.imgur.com/MkfBC.png
【问题讨论】:
-
第一个问题,你这样做是为了大学/学校的目的,你必须使用原始 c 样式数组吗?
-
你需要把这行:
temparr[i] = *pointEnd - i ;改成这个:`temparr[i] = *( pointEnd - i ); -
无关:std::reverse
-
@user4581301 是的,他可能也不应该使用
VLA。 -
如果分配不允许
std::reverse,请考虑使用循环从两端交换项目,然后向中间移动,按原样交换。当程序到达数组的中间时,一切都被交换了,你就完成了。
标签: c++ arrays unit-testing pointers