c - 空指针的用途

标签 c pointers void

  • 平台: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/

相关文章:

c - 为什么我不能在线程函数内返回值?

java - 如何从 void 方法显示数组?

C++在类中使用函数时出错

Java 错误消息 - 调用返回整数的方法时,此处不允许使用 'void' 类型

c - C 中的重复消除

c - 编写 Vending 程序,while 语句不会中断?

c - 验证某个键是否在哈希表中

c - fopen() 段错误,文件存在

c++ - char "string"功能未更新

c++ - 使用或不使用指针作为类引用。有什么不同?