我在string.h中编写了一些类似于memset(),memcpy()等的函数.我使用void指针来避免使函数类型具体.但是当我使用char指针取消引用void指针时,我不知道为什么我要求一个void指针.在我看来,void指针不做任何事情.所以我的问题是void指针有什么作用?举个例子,这是我的一个功能.
size_t damlocs(size_t sizele, void *val, size_t valsiz, void *ele, size_t elesiz)
{
//All that 'ele' is used for is this assignment
char *elebyt = ele;
char *valbyt = val;
size_t eleind = 0;
size_t elebytind = 0;
size_t valbytind = 0;
if(elebyt && valbyt)
{
while(eleind++ < elesiz)
{
elebytind = eleind * sizele;
valbytind = 0;
while(elebyt[elebytind++] == valbyt[valbytind++])
if((valbytind + 1) / sizele == valsiz)
return eleind + 1;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
描述:damlocs()将'ele [0]'中'val'指向的序列定位到'ele [elesiz - 1]'并返回找到序列开头的元素.如果未找到序列,则返回零.它在概念上与stdlib.h中声明的bsearch()类似,但是使用字节到字节的比较.
在C中,所有对象指针都可以隐式转换为void指针,因此您可以轻松地(&x, sizeof x)为任何对象调用函数x.
确实,你会使用某种char指针来将内存作为一个字节数组来处理,但如果你的函数占用了a char *,你需要在调用站点进行显式转换.