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
标签:void,swap,类型,float1,float2,指针
From: https://www.cnblogs.com/LiBlog--/p/18115847