void指针可以指向任意类型的数据,同时任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换,可以用于封装数据结构等。
如果函数的参数可以是任意类型指针,那么应该使用 void 指针作为函数的形参,这样函数就可以接受任意数据类型的指针作为参数。
拿memcpy举例:
void *mymemcpy (void *dst, const void *src, size_t size)
{
assert((dst!=NULL) && (src!=NULL));
char *temp_dest = (char *)dst;
char *temp_src = (char *)src;
char* retAddr = temp_dest;
size_t i = 0;
/* 解决数据区重叠问题*/
if ((retAddr>temp_src) && (retAddr<(temp_src+size)))
{
for (i=size-1; i>=0; i--)
{
*(temp_dest++) = *(temp_src++);
}
}
else
{
for (i=0; i<size; i++)
{
*(temp_dest++) = *(temp_src++);
}
}
*(retAddr+size)='\0';
return retAddr;
}
int main()
{
int des[5] = {1, 1, 1, 1, 1};
int src[5] = {2, 2, 2, 2, 2};
mymemcpy(des, src, sizeof(des));
int i;
for(i = 0; i < 5; i++)
printf("%d ", des[i]);
printf("\n");
exit(0);
}