反转阵列到位

Zan*_*erg 4 c arrays

好吧所以我试图打印和数组,然后反向使用另一个数组但我正在尝试创建一个For循环,它将采取一个数组并反转所有元素到位,而不必我经历创建过程一个全新的阵列.

我的for循环遇到了一些问题,我不知道从哪里开始......我正在使用i将元素移到最后并将其移到前面然后j被用作计数器跟踪元素...如果有更简单的方法这样做任何建议将不胜感激.

我是这种编程语言的新手,所以非常感谢任何额外的信息.

#include <stdlib.h>
#include <time.h>

int Random(int Max) {
  return ( rand() % Max)+ 1;
}

void main() {
  const int len = 8;
  int a[len];
  int i;
  int j = 0;
  Randomize() ;

  srand(time(0));
  //Fill the Array
  for (i = 0; i < len; ++i) {
    a[i] = rand() % 100;
  }

  //Print the array after filled
  for (i = 0; i < len; ++i) {
    printf("%d ", a[i]);
  }
  printf("\n");
  getchar();

  //Reversing the array in place.
  for (i = a[len] -1; i >= 0, --i;) {
    a[i] = a[j];
    printf("%d ", a[j]);
    j++;
  }


}
Run Code Online (Sandbox Code Playgroud)

rw.*_*ng1 7

while循环可能更容易概念化。可以认为它是从两端开始并交换两个元素,直到达到中间为止。

  i = len - 1;
  j = 0;
  while(i > j)
  {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    i--;
    j++;
  }

  //Output contents of now-reversed array.
  for(i = 0; i < len; i++)
    printf("%d ", a[i])
Run Code Online (Sandbox Code Playgroud)


zdd*_*zdd 5

void reverse_range(int* buffer, int left, int right)
{
    while (left < right)
    {
        int temp = buffer[left];
        buffer[left++] = buffer[right];
        buffer[right--] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

叫它反向数组

int a[3] = {1, 2, 3};
reverse_range(a, 0, 2);
Run Code Online (Sandbox Code Playgroud)