反转数组

时间:2012-10-09 13:53:18

标签: c arrays pointers

我有一个反转数组的功能,我认为有一些相同的问题。请引导我走正确的道路,以便整理出来。

功能:

void reversearr (int arr[], int arrlen)

    {
        int a, b, arrtemp[arrlen];
        b=arrlen;
        for (a=0; a<=arrlen; a++)
        {
            arr[a] = arrtemp[b];
            b--;
        }
        printf("\nthe reversed array is");

        for(b=0; b<arrlen; b++)
        {
            printf("%d",arrtemp[b]);
        }
    }

以这种方式调用函数

reversearr(arr,max);

6 个答案:

答案 0 :(得分:3)

您正在从arrtemp复制未经初始化的内容。

我想你想要像

这样的东西
void reversearr (int arr[], int arrlen)
{
    int a;
    for (a=0; a<arrlen/2; a++)
    {
        int tmp = arr[arrlen-1-a]
        arr[arrlen-1-a] = arr[a]
        arr[a] = tmp;
    }
}

答案 1 :(得分:3)

void reversearr (int arr[], int arrlen)
{  
    int a, tmp;
    for (a = 0; a < arrlen / 2; ++a)
    {
         tmp = arr[a];
         arr[a] = arr[arrlen - a - 1];
         arr[arrlen - a - 1] = tmp;
    }
}

答案 2 :(得分:2)

中的两个问题
    int a, b, arrtemp[arrlen];
    b=arrlen;
    for (a=0; a<=arrlen; a++)
    {
        arr[a] = arrtemp[b];
        b--;
    }
  1. arrtemp[arrlen]超出范围,有效索引为0到arrlen - 1
  2. 您正在从未初始化的arrtemp复制到原始arr

答案 3 :(得分:1)

有效索引为0到arrlen - 1,因此:

for(a = 0; i <= arrlen; a++)

有一个off-by-one错误。您需要<

另请注意,使用具有动态长度的数组在C中是一个非常“新”的东西,它应该没问题,但需要C99编译器。与通过单个临时交换元素的O(1)(存储)方法相比,这样做没有任何好处。

答案 4 :(得分:1)

您使用错误的数组存储反向。请尝试以下代码:

void reversearr (int arr[], int arrlen)

    {
        int a, b, arrtemp[arrlen];
        b=arrlen;
        for (a=0; a<=arrlen; a++)
        {
            arrtem[a] = arr[b];
            b--;
        }
        printf("\nthe reversed array is");

        for(b=0; b<arrlen; b++)
        {
            printf("%d",arrtemp[b]);
        }
    }

答案 5 :(得分:0)

在JavaScript中,如果存在数组,则必须反转每个元素的字符串:

var arr = ['woow is great budd','mu me lelo','wikindi'];

function reverseString(str){
    return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}

for(i=0;i<arr.length;i++){
   console.log(reverseString(arr[i]));
}