反转数组的函数 - C.

时间:2013-04-09 16:04:52

标签: c arrays pointers

我编写了一个反转任何数组的代码,它的意思是从开头到结尾,但它不适用于char的类型。 我如何编写一个代码来恢复任何数组(int,float,char)? 例如,原始数组是:1,2,3,4,5,6,7,8,9,10 运行后,阵列将是:10,9,8,7,6,5,4,3,2,1

我的代码:

#include <stdio.h>

#define SIZE 10

void reverseArr ( void *arr, unsigned size);

void main ()
{

    char a[SIZE] = {'a','b','c','d','e', 'f', 'g', 'h', 'i', 'j'};

    reverseArr (a, SIZE);

}

void reverseArr ( void *arr, unsigned size)
{
    int *start, *end, temp;

    start=(int*)arr;
    end=(int*)arr+9;

    while (start<end)
    {
        temp=*start;
        *start=*end;
        *end=temp;
        start++;
        end--;
    }
}

2 个答案:

答案 0 :(得分:5)

您将void指针强制转换为int指针。

可能在您的平台上sizeof(char) < sizeof(int)。所以你不要通过char遍历数组char。

如果没有传递元素的大小,你就无法编写这样的通用函数。

void reverseArr ( void *arr, unsigned len_array, unsigned size_element)
{
  char* start = (char*) arr;

  ....
  start += size_element;
  ....
}

自设计sizeof(char) == 1起,您可以使用指向char的指针遍历缓冲区。只需移动sizeof(type)所指示的正确数量的字符。

reverseArr (a, SIZE, sizeof(a[0]));

答案 1 :(得分:0)

关键是你需要知道这个数组所包含的元素类型。推进指针的运算符做出了一定的假设 - 下一个元素进一步位于内存sizeof(type)字节中。

如果你想编写通用版本,你应该传递sizeof元素并做适当的指针算术。