首页 > C > 指针 阅读:57,774

void* 类型指针

我们可以使用void*来定义个void *类型的指针如下:

void *p;

pvoid *类型指针,其他类型指针隐式转换成该类型,不能直接使用*p来取值,必须先转换为特定类型再做取值

p可以接受任何类型的指针赋值

p赋值给其它类型的指针,需要强转

p不能进行解引用*运算,必须先转换

比如:

int i = 10;

char ch = ‘a’;

int *p1 = &i;

char *p2 = &ch;

void *pv1 = p1;//p1赋值给pv1,不需强转,不能使用*pv1

void *pv2 = p2;//p2赋值给pv2,不需强转,不能使用*pv2

int *p3 = (int *)pv1;//pv1赋值给p3,需要强转

char *p4 = (char *)pv2;//pv2赋值给p4,需要强转

也就是说:void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:

int * pint;

void *pvoid;

pvoid = pint; /* 不过不能 pint= pvoid; */

如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint= (int *)pvoid;

 

ANSIC标准中,不允许对void指针进行算术运算如pvoid++pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为void *char *一样。sizeof(*pvoid )== sizeof( char)

如果函数的参数可以是任意类型指针,那么应声明其参数为void*

void *memcpy(void *dst, void *src, size_t len)

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注