You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++数组反转两次恢复原数组时会出现负整数?

问题解决方案

根因定位

reverseArray函数内的元素赋值逻辑存在运算符优先级错误,你编写的*pointEnd - i实际执行顺序是先解引用pointEnd拿到对应值,再将该值减去i,和你预期的「先将指针pointEnd向前偏移i位再解引用取值」的逻辑完全不符。

修正方案

将错误行

temparr[i] = *pointEnd - i;

修改为

temparr[i] = *(pointEnd - i);

即可实现正常的两次反转恢复原数组的效果。

异常现象解释

  • 第一次调用反转看起来正常:你初始数组元素是0~49递增排列,首次调用时pointEnd指向最后一个元素值为49,*pointEnd -i的结果恰好等于49-i,刚好和反转后的预期值重合,所以第一次输出无异常。
  • 第二次调用出现负数:首次反转后数组末位元素值为0,第二次调用时pointEnd指向该0值,执行*pointEnd -i就会得到0-i的负数结果,符合你遇到的异常表现。

额外优化建议

你代码中int temparr[arrayLength];属于C语言的变长数组(VLA)特性,不属于标准C++语法规范,部分编译器可能不支持该写法,更规范的实现可以直接在原数组上交换首尾元素,不需要额外开辟临时数组,示例如下:

void reverseArray(int arrayLength, int sequence[]) {
    int *pointStart = sequence;
    int *pointEnd = sequence + arrayLength - 1;
    while (pointStart < pointEnd) {
        int temp = *pointStart;
        *pointStart = *pointEnd;
        *pointEnd = temp;
        pointStart++;
        pointEnd--;
    }
}

内容的提问来源于stack exchange,提问作者Connor Ronnoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:00:05