• C 语言 void指针


    C 语言 void指针

    到目前为止,我们已经研究了分配给指针的地址应该与指针声明中指定的类型相同。 例如,如果我们声明了int指针,则此int指针不能指向float变量或某种其他类型的变量,即它只能指向int类型的变量。 为了克服这个问题,我们使用了指向void的指针。 指向void的指针表示可以指向任何数据类型的通用指针。 我们可以将任何数据类型的地址分配给void指针,并且可以将void指针分配给任何类型的指针,而无需执行任何显式的类型转换。

    void指针的语法

    void *pointer name;
    
    • 1

    下面给出了void指针的声明:

    void *ptr;
    
    • 1

    在上面的声明中,void是指针的类型,而’ptr’是指针的名称。

    让我们看一些示例:

    int i=9;         //整型变量的初始化。
    
    int *p;         // 整数指针声明。
    
    float *fp;         // 浮点指针声明。
    
    void *ptr;         //void指针声明。
    
    p=fp;         // 错误.
    
    fp=&i;         // 错误
    
    ptr=p;         // 正确
    
    ptr=fp;         // 正确
    
    ptr=&i;         // 正确
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    C语言中void指针的大小

    C语言中void指针的大小与字符类型的指针的大小相同。指向void的指针的表示形式与字符类型的指针相同。指针的大小将根据所使用的平台而有所不同。

    让我们看下面的实例:

    示例

    #include 
    int main()
    {
        void *ptr = NULL; //void 指针
        int *p  = NULL;// 整型指针
        char *cp = NULL;//字符指针
        float *fp = NULL;//浮点指针
        //void指针的大小
        printf("void指针的大小 = %d\n\n",sizeof(ptr));
        //整型指针的大小
        printf("整型指针的大小 = %d\n\n",sizeof(p));
        //字符指针的大小
        printf("字符指针的大小 = %d\n\n",sizeof(cp));
        //浮点指针的大小
        printf("浮点指针的大小 = %d\n\n",sizeof(fp));
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出结果

    void指针的大小 = 4
    
    整型指针的大小 = 4
    
    字符指针的大小 = 4
    
    浮点指针的大小 = 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    void指针的优点

    以下是void指针的优点:

    • malloc()和calloc()函数返回void指针,因此这些函数可用于分配任何数据类型的内存。

    示例

    #include 
    #include
    int main()
    {
       int a=90;
     
       int *x = (int*)malloc(sizeof(int)) ;
       x=&a;
       printf("x指针所指向的值 : %d",*x);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    输出结果

    x指针所指向的值 : 90
    
    • 1
    • C中的void指针也可以用于实现C中的泛型函数。

    为什么我们使用void指针?

    由于其可重用性,我们使用void指针。void指针可以存储任何类型的对象,并且我们可以通过使用带有适当类型转换的间接操作符来检索任何类型的对象。

    让我们通过一个实例来理解。

    示例

    #include 
    int main() 
    { 
      int a=56; //初始化一个整数变量'a'。
      float b=4.5; //浮点变量'b'的初始化。
      char c='k'; //字符变量'c'的初始化。
       void *ptr; //声明空指针。
       // 为变量“a”分配地址。
       ptr=&a;
       printf("a的值为 : %d",*((int*)ptr));
       //为变量'b'分配地址。
       ptr=&b;
       printf("\nb的值为 : %f",*((float*)ptr));
       //为变量'c'分配地址。
       ptr=&c;
        printf("\n c的值为 : %c",*((char*)ptr));
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    输出结果

    a的值为 : 56
    b的值为 : 4.500000
     c的值为 : k
    
    • 1
    • 2
    • 3
  • 相关阅读:
    一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO
    VScode 自定义主题各参数解析
    Java 21 新功能展示(含示例)
    .NET 序列化枚举为字符串
    C#/VB.NET 将PDF转为PDF/X-1a:2001
    【GD32F303红枫派使用手册】第十六节 USART-DMA串口收发实验
    gpt-4-all模型中转实现
    第十九章 Java绘图
    7.运算符
    Flutter中GetX系列二--Snackbar基本使用(顶部弹窗)
  • 原文地址:https://blog.csdn.net/Tom_Jerry__/article/details/134474530