首页 > 解决方案 > C语言中的反向数组

问题描述

它是一个反向数组程序,但是程序的输出出错了,它没有反转所有数字我已经干运行了这段代码,但没有找到问题所在?

#include <stdio.h>

void reverseArray(int ar[], int start, int end)
{
    while (start < end)
    {   ar[start] = ar[start] + ar[end];
        ar[end] = ar[start] - ar[end];
        ar[start] = ar[start] - ar[end];
        start += 1;
        end -= 1;
        reverseArray(ar, start, end);
    }
  
}

void main()
{
    int ar[5] = {1, 2, 3, 4, 5};
    reverseArray(ar, 0, 4);
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", ar[i]);
    }
}

输出为:5 2 3 4 1

我发现控制进入while循环3次但根据条件它应该只运行循环2次

标签: arraysc

解决方案


您正在将循环与递归混合在一起。递归地,您反转数组的子部分并使用循环再次反转它。只有最外面的元素保持交换。

顺便说一句,像这样的交换可能会发生溢出,从而导致未定义的行为。


推荐阅读