void与void*的区别

定义:
void:是空类型,是数据类型的一种
void*:是指针类型,是指针类型的一种,可以匹配任意类型的指针,类似于通配符
void
说明:void作为返回值类型使用,表示没有返回值;作为形参,表示形参列表为空,在调用函
数是不能给实参
举例:

// 函数声明
void fun(void); // 等效于 void fun();
// 函数调用
fun();

void*
说明:
void*是一个指针类型,但该指针的数据类型不明确,无法通过解引用获取 内存中的数据,
因为 void* 不知道访问几个内存单元。
void*是一种数据类型,可以作为函数返回值类型,也可以作为形参类型
void*类型的变量在使用之前必须强制类型转换,明确它能够访问几个字节的内存空间

        int *p = (int*)malloc(4);

        double *p2 = (double*)malloc(8);

举例:

#include <stdio.h>
#include <stdlib.h>
// 函数定义
void* fun(void* p) // 指针函数(返回值类型是指针的函数,此时返回的是不明确类型,需要外部强转)
{
int *p;
// double *p;
// long *p;
// char *p;
return p;
}
// 函数调用
void main()
{
int *p;
void* a = fun(p);// 这种接收方式,实际上没有意义
printf("%p\n",a);// 可以正常打印,打印出一个地址
*a = 10;// 编译报错,void*变量不能解引用访问数据
int *w = (int*)a;
*w = 10;// 编译和运行正常,void*变量a在使用前已经强制类型转换了,数据类型明确了,访问的内存
单元明确了。
}

说明:
void*作为返回值类型:这个函数可以返回任意类型( char*,int*,double*等 )的指针。
void*作为形参类型:这个函数在调用时,可以给任意类型( char*,int*,double*等 )的指
针。
总结:
void* 类似于通配符,不能对void*类型的变量解引用(因为不明确内存单元的大小)。

void*在间接访问(解引用)前要强制类型转换,但不能太随意,否则存和去的数据类型不 一致。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值