0

我写了一个反转任何数组的代码,它的意思是从头到尾,但它不适用于 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--;
    }
}
4

2 回答 2

5

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

可能在您的平台上sizeof(char) < sizeof(int)。因此,您不会逐个字符地遍历数组。

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

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]));
于 2013-04-09T16:06:49.480 回答
0

关键是你需要知道这个数组包含什么类型的元素。前进指针的操作符做了一定的假设——下一个元素位于内存sizeof(type)字节中。

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

于 2013-04-09T16:08:43.830 回答