C语言中的void和void*的定义及用法
void
void最常见的用法,就是在函数中限定函数的参数和返回值的 void draw(void); 表明函数draw没有参数也没有返回值,void在别的的地方的应用我也没见过;
实际上,如果把void 和int,char,double等类型放到一起理解的话,首先还是那句揭示本质的话:变量类型就是固定大小内存块的别名,那么void占用多大内存呢,编译器并没有定义void占用多大内存,所以对于void var; 这样的定义,编译器自然是不允许的,在vs中的错误提示是:不允许使用不完整的类型。
void*
相比于void,void *就更加有意义一些。void *是一个指针类型,指针变量都占4byte内存(4byte=32 bit=2^32=4G,所以4byte就足以指向任何的内存地址了),所以对于void *p=NULL; 这样的定义,编译器可以为p分配内存,那么,如此定义的p有什么作用呢?
int *a=NULL;
p=a;
double *b=NULL;
p=b;
char c[16]={0};
p=c;
void* 就像一张白纸,任何类型的指针都可以直接赋值给void *类型的指针;
但是反过来
int *a=NULL;
a=p;//err
a=(int *)p;//需要强制类型转换
这样转过来转过去有何意义?
典型应用
一
void * memcpy(void *dest, const void *src, size_t len); void * memset ( void * buffer, int c, size_t num );
memcpy和memset对外接收任何类型的指针,这样是合理并且必要的,因为这是内存操作函数,是对bit进行操作的,考虑数据类型是没有任何意义的(越触及本质,越抽象,也越有包容性)。
二
int *a=NULL;
a=(int *)malloc(sizeof(int));
同样的,malloc函数只关注你要多大的内存,你需要把它怎么划分是你的事情,但是你需要显式的表明你是怎么划分的。这里语法要求是必须的,void *类型转为其他类型必须强制类型转换。
C语言中的void和void*的定义及用法相关推荐
- C语言中fun1()和fun2(void)的区别
C语言中fun1()和fun2(void)的区别 在一次C语言实训中我发现老师在对无参函数的书写中写成fun2(void)的形式,这引起了我的好奇心,我只知道fun1()和fun2(void)是两个无 ...
- C语言 SLEEP函数不起作用,C语言中的sleep() 函数 sleep函数的具体用法
导航:网站首页 > C语言中的sleep() 函数 sleep函数的具体用法 C语言中的sleep() 函数 sleep函数的具体用法 相关问题: 匿名网友: 关于sleep()函数在windo ...
- c语言中rand()的作用,c语言中rand()函数怎么用? rand函数的用法
导航:网站首页 > c语言中rand()函数怎么用? rand函数的用法 c语言中rand()函数怎么用? rand函数的用法 相关问题: 匿名网友: rand(产生随机数) 相关函数 sran ...
- java 中定义整形变量_智慧职教: 在Java语言中,一条语句可以定义多个变量。例如int a; b;就定义了两个整型变量a 和b。...
智慧职教: 在Java语言中,一条语句可以定义多个变量.例如int a: b:就定义了两个整型变量a 和b. 答:0 "物的依赖性关系"是( ) 答:资本主义社会之中的人与人之间的 ...
- java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...
[单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...
- c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...
在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...
- 在c语言中,可以使用动态内存分配技术定义元素个数可变的数组,C语言复制在线考题1精选.doc...
C语言复制在线考题1精选 窗体顶端 <C语言程序设计208304>综合测试 返回测验列表 大项 1 / 2 - 单项选择题 60.0/ 70.0 分 本大题共35道,每题2分,共计70分, ...
- PERL 语言中的q,qw,qr,qx,qq......符号用法总结
在perl语言中,有两个特殊而常用的符号 qq qw,分别解释如下: qq{foobar}的意思为意思为双引号字符串,可内插变量 相当于 "foobar" qw{foo bar}的 ...
- PERL 语言中的q,qw,qr,qx,qq......符号用法
在perl语言中,有两个特殊而常用的符号qq qw,分别解释如下: qq{foobar}的意思为意思为双引号字符串,可内插变量 相当于 "foobar" qw{foo bar}的意 ...
- c语言中include的作用,c语言include的用法是什么
小编整理了c语言 include的用法.希望对你有帮助哦! 其实这个只要了解了文件包含的基本处理方法就可以对文件包含有一个很好的理解与应用了,下来我们一起来看一下: 文件包含的处理方法: 处理时间:文 ...
最新文章
- 创建数据库,指定数据库的字符集和编码顺序
- Unity增强现实初学者指南视频教程 A Beginner’s Guide to Augmented Reality with Unity
- 均方差误差函数(使用函数方式实现MSE计算)
- MyEclipse+Tomcat部署发布webapp
- Angular rxjs Subject笔记
- java中try 与catch的使用
- java list 差集_Java基础之集合框架
- MySql 表的分区介绍
- OSEK 操作系统的基本概念
- java opencv 之车辆识别
- Win10激活彻底破解:一键获取数字权利工具问世
- 《时代》评出50个最酷网站
- 亲手将TP-LINK路由器改装成交换机使用
- ODL(C版本)安装过程
- CSS 网页定位与布局
- Eclipse Neno.3 + Jrebel 7.0.9 图文在线安装
- 安卓手机玩游戏卡顿怎么解决_安卓手机卡顿怎么办?5招教你变流畅,继续用三五年,媲美iPhone...
- 兔年首文迎新春-Cesium橘子洲烟花礼赞
- VUE项目报错:[Vue warn]: Error in render: “TypeError: Cannot convert object to primitive value“
- 天天996,试用期4个月,被公司劝退!开发者太糟心了!