我编写了一个反转任何数组的代码,它的意思是从开头到结尾,但它不适用于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--;
}
}
答案 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元素并做适当的指针算术。