- 平台:Linux 3.2.0 x86 (Debian Wheezy)
- 编译器:GCC 4.7.2 (Debian 4.7.2-5)
我在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;
}
描述:damlocs() 将在'ele[0]' 到'ele[elesiz - 1]' 中定位由'val' 指向的序列,并返回找到序列开头的元素。如果未找到序列,则返回零。它在概念上类似于 stdlib.h 中声明的 bsearch(),但使用的是字节到字节的比较。
最佳答案
在 C 中,所有对象指针都可以隐式转换为 void 指针,因此您可以使用 (&x, sizeof x)
为任何对象轻松调用函数 x
.
的确,您会使用某种 char
指针来将内存寻址为字节数组,但如果您的函数采用 char *
,则您需要一个在调用站点显式转换。
关于c - 空指针的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479216/