void指针作为函数形参的用法

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);
}

在这里插入图片描述

你可能感兴趣的:(C,c语言,开发语言,linux)