【问题标题】:Why are the integers in the array negative after reversing the array and reversing back to the original array?为什么将数组反转并反转回原始数组后数组中的整数为负数?
【发布时间】: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


【解决方案1】:

你对这行有一个错误:

temparr[i] = *pointEnd - i;

在这里,您取消引用 pointEnd 指针并从结果整数中减去 i

你的意思是:

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

在这里,您从pointEnd 指针中减去i,然后取消引用。

话虽如此,与其做令人困惑的指针运算,不如做这样的事情:

temparr[ i ] = sequence[ arrayLength - i ];

【讨论】:

  • 或者只是temparr[i] = *pointend--;。 (或者,temparr[i] = *--pointend;pointend 的初始值进行适当调整。)
  • 疯狂的快速反馈。类的“赋值”需要这个指针方法。感谢您的帮助!有趣的修复...
  • @ConnorRonnoc 如果我的回答能够解决您的问题,请务必将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多