1

我是c的初学者。我不太了解如何将数组用作函数参数、参数或如何从函数返回数组。据我所知,下面的代码应该可以正常工作。但我不知道问题出在哪里。该功能无法正常工作。

//reversing an array using function
#include<stdio.h>
void rev(int array[],int length)
{
    int k,j,temp;
    for(k=length-1,j=0;k>=0&&j<length;k--,j++){
        temp=array[k];
        array[k]=array[j];
        array[j]=temp;
    }
}
int main()
{
    int c,arr[]={1,2,3,4,5,6,7,8,9};
    rev(arr,9);
    for(c=0;c<9;c++){
        printf("%d ",arr[c]);
    }
    return 0;
}
4

3 回答 3

3

你只需要走到数组的中间,如果你走得更多,你重新反转数组:

所以这:

for(k=length-1,j=0;k>=0&&j<length;k--,j++){

应该:

for(k=length-1,j=0;k > j;k--,j++){
于 2012-08-06T08:45:00.863 回答
0

在我看来,您正在执行相反的操作两次

也就是说,您立即交换开始和结束元素,并在迭代结束时再次交换它们。即你最终得到相同的数组。

您可以:

  1. 仅在阵列中途执行交换,或
  2. populate a second array in reverse from the first (I don't know if you want to repopulate the original array, however - you may need to copy it back in)
于 2012-08-06T08:47:50.647 回答
0

There no problem with array. Problem with your algo. //reversing an array using function

#include<stdio.h>
void rev(int array[],int length)
{
    int k,j,temp;
    for(k=length-1,j=0;k>=0 && j<length / 2; k--,j++){
        temp=array[k];
        array[k]=array[j];
        array[j]=temp;
    }
}

This reverse array. Your algo reverse it twice. So just add /2 in for conditions.

于 2012-08-06T08:55:03.307 回答