void类型指针

void类型指针

void 指针是一种特殊的指针,表示为“无类型指针”,。由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换

void    *p1;
int     *p2;

p1 = p2;

但是,将 void 指针赋值给其他类型的指针时,必须进行强制类型转换

void    *p1;
int     *p2;

p2 = (int *)p1;

指针保存的是首地址,指针类型就是告诉指针后面有多少,而void类型的指针可以指向任何类型的数据,就是因为void类型不知道大小,任何类型的数据都能存进去,但是在取出来的时候,需要用强制类型转换告诉void指针取多少数据

void类型指针作为函数参数

用 void 指针作为函数的形参,这样函数就可以接受任意数据类型的指针作为参数,可以提高代码的复用性。

例如我们数据库的相关操作并不关心数据本身的类型,直接传void类型的数据,这样可以在不同项目中使用同一套代码,只需要在取出这个数据时强制转换成我们需要的类型。

#include <stdio.h>

void swap(void *a, void *b, size_t size)
{
    unsigned char *x = (unsigned char *)a;
    unsigned char *y = (unsigned char *)b;
    unsigned char temp;

    for (size_t i = 0; i < size; i++) {
        temp = x[i];
        x[i] = y[i];
        y[i] = temp;
    }
}

int main()
{
    int int1 = 1, int2 = 2;
    float float1 = 1.0, float2 = 2.0;

    printf("Before swap: int1=%d, int2=%d\n", int1, int2);
    swap(&int1, &int2, sizeof(int));
    printf("After swap: int1=%d, int2=%d\n", int1, int2);

    printf("Before swap: float1=%f, float2=%f\n", float1, float2);
    swap(&float1, &float2, sizeof(float));
    printf("After swap: float1=%f, float2=%f\n", float1, float2);

    return 0;
}
Before swap: int1=1, int2=2
After swap: int1=2, int2=1
Before swap: float1=1.000000, float2=2.000000
After swap: float1=2.000000, float2=1.000000
Before swap: c1=abc, c2=123
After swap: c1=123, c2=abc
posted @ 2024-04-05 16:05  梨子Li  阅读(37)  评论(0)    收藏  举报