无类型(void)和万能指针(void *)

本文详细介绍了C/C++中void类型的作用,包括限定无返回值函数、无参数函数,以及void*作为万能指针的使用。void*可以指向任意类型的数据,但在解引用时需要强制类型转换。malloc函数返回void*,表示分配的内存可存放任意类型数据,转换由调用者负责。同时,void不能用于定义变量,因为系统无法为其分配空间。
摘要由CSDN通过智能技术生成

无类型void

void用途:

  1. 限定函数返回值;
    例如:void text()表示函数无返回值;
  2. 限定函数的形参;
    例如:int text (void)表示函数没有参数传递,返回一个int类型的数据;通常省去void,直接写成int text ()

注意:void不能像char 、 int 、double等类型那样定义变量,因为void是无类型,系统无法给void分配空间,不知道分配多大字节的空间。所以没有void类型的变量;

万能指针void *

任何类型的指针都可以直接赋值给void *类型的指针,void * 可以指向任意类型的数据,就是说可以用任意类型的指针对 void * 赋值,故称为万能指针;

  • void *是一个指针类型,指针变量都占4byte内存(4byte=32 bit),所以对于void *p=NULL, 这样的定义,编译器可以为p分配内存。
void *p = NULL;
printf("size p = %d\n",sizeof(p));//打印输出4,即void*类型指针系统分配4字节
  • void *类型不可直接解引用操作,因为解引用出来的是void基类型,但是系统没有这种类型的变量;
int num = 10;
void *p = #
printf("*p = %d\n",*p);//error
  • void* 可以存放任意数据类型的地址,但反过来则不行,若将void *类型对其他类型赋值,需要将void * 类型进行强制类型转换;
int *p1 = NULL;
char *p2 = NULL;
void *p3 = NULL;
p3 = p1;//不需要强制类型转换,编译器不会出警告
p1 = (int *)p2;// 需要进行对应类型的强转,不然编译器会出警告,提示指针类型不匹配
p1 = (int *)p3;//若使用,需强转,转换成对应类型int *类型
  • 典型应用:malloc函数

函数原型:void * malloc(size_t size);
作用:malloc 向系统申请分配指定 size 个字节的内存空间,即 malloc 函数用来从堆空间中申请指定的 size 个字节的内存大小,返回类型是 void * 类型,如果成功,就会返回指向申请分配的内存,否则返回空指针;

注意:malloc函数返回的是void * 类型,因为malloc函数只负责开辟空间,将这块内存的首地址返回给函数调用者,并不知道函数调用者要将此空间存放什么类型的数据,故返回 void * 类型。最后由函数调用者进行相应类型的强制转换;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值