全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)
想实现一个通用一点的数组拷贝功能,看了一下可以使用memcpy。这个函数是在string.h中的,其函数原型如下:
Void *memcpy(void *dest,const void *src,size_t n);
功能是从src向desti拷贝一个n个字节的内容,返回的值为一个指向desti的指针。这基本上是我对于这个函数的所有了解。不过,有了这些信息基本上就可以实现我想要的一个比较通用的数组拷贝功能了。设计数组拷贝代码与测试代码如下(忽略数组打印功能的实现):
#include "stdio.h"
#include "string.h"
typedef unsigned char uint8_T;
typedef unsigned int uint32_T;
uint32_T test_array1[5] = {1,3,5,7,9};
uint8_T test_array2[5] = {2,4,6,8,10};
uint32_T dest_array1[5];
uint8_T dest_array2[5];
void ArrayCopy(void *dest_array,const void *source_array,size_t array_size, \
size_t element_size)
{
size_t array_mem_size = array_size * element_size;
memcpy(dest_array,source_array,array_mem_size);
}
void PrintArray(void *array, size_t array_size, size_t element_size)
{
size_t i = 0;
uint32_T temp_value = 0;
uint8_T *byte_value = NULL;
uint32_T *word_value = NULL;
for(i = 0; i < array_size; i++)
{
if(element_size == 1)
{
byte_value = array;
temp_value = (uint32_T)(*(byte_value + i));
}
else
{
word_value = array;
temp_value = *(word_value + i);
}
printf("%d,",temp_value);
}
printf("\n");
}
int main(void)
{
printf("value of test array 1:\n");
PrintArray(test_array1,5,4);
ArrayCopy(dest_array1,test_array1,5,4);
printf("value of new array 1:\n");
PrintArray(dest_array1,5,4);
printf("\n\n");
printf("value of test array 2:\n");
PrintArray(test_array2,5,1);
ArrayCopy(dest_array2,test_array2,5,1);
printf("value of new array 2:\n");
PrintArray(dest_array2,5,1);
return 0;
}
编译与运行的效果如下:
对这个功能的了解还是比较肤浅,但是现在看来应该是能够以此来实现我想要的功能。