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)=';'return
; retAddr}
int
main ()int
{
[ des5]= 1 {,1 ,1 ,1 ,1 };int
[ src5]= 2 {,2 ,2 ,2 ,2 };mymemcpy
(,des, srcsizeof ()des);int
; ifor
(=i 0 ;< i 5 ;++ i)printf
("%d ",[ des]i);printf
("\n");exit
(0);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)