范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

详解C语言数据类型之void类型

  在程序中,每一个变量都应该有相应的数据类型,数据的类型决定了编译器可以为之开辟多少的空间来存放数据。
  例如:int 类型需要 4 个字节,char 类型需要 1 个字节,指针类型需要 4 个字节等等。
  但 C 语言中还有一种特殊的数据类型——void。 1. void 介绍
  void 表示为 "无"、"空"、"没有" 的意思。
  在这里就把 void 理解为啥也不是。
  作为一个数据类型,如果用 void 声明变量会是什么情况呢?
  编译器要 给数据分配多少的内存空间 ,是要 依据变量定义时的数据类型 。
  而 void 类型比较特殊。虽然也是一种数据类型,但不确定性太强了。
  如果可以用 void 声明变量,你要是开心先给个 int 整型的数据,不开心再给个 char 字符型的数据,或者 double 类型的数据。
  这要求的内存空间一会儿大,一会儿小的,编译器也很难办。
  内存就那么点,经不起这么折腾。
  因此, void 数据类型是不能直接用在变量声明的 。
  那么 void 应该被用在哪里呢? 2. 函数的参数
  void 最常使用就是用在函数里面,第一个就是 函数的参数 。
  通常会看到如下的函数原型定义: int func(void); int func();
  这两个函数表示的意义是一样的,都是 无参数、返回值为 int 类型 的函数。
  但有一点不同。根据不同的编译器,对语法检验严格程度也有所不同。用 g++ 编译就有可能出现以下的情况: int func1(void) {   return 1; } int func2() {   return 2; } int main() {   func1();   func2();   func1(123); // error   func2(123);   func1(3.14); // error   func2(3.14);   return 0; }
  参数部分为 void 的函数,在调用函数的时候,有传入实际参数的时候会产生报错, 传入的参数太多了! 实际上参数为 void 的函数是不能传入任何类型的参数。
  而参数部分啥都没有的函数,调用函数的时候可以传入任意类型是不会报错的。
  不过这个问题大体上没有人会这么做,因为毫无意义。 3. 函数的返回类型
  void 的另一个作用,就是在 函数的返回类型 上面。
  有时候,我们只需要函数运行的过程,而不是为了获取最后的结果。此时就可以使用 void 类型,表示该函数 没有返回值 。
  例如:我只想交换 a 和 b 两个变量分别存储的数据。 #include void swap(int *a, int *b) {   int temp;   temp=*a, *a=*b, *b=temp; } int main() {   int a=3, b=5;   swap(&a, &b);   printf("a=%d, b=%d ", a, b);   return 0; }
  运行结果:a=5,b=3
  一般在 void 定义的函数里面,return 是多余的。不过,即便加上 return 返回值(gcc 6.3版本中),也对函数没有什么影响。
  既无法 重新使用其他数据类型定义的变量来接收函数的返回值 ,也 不能在 printf 函数中使用的 。
  4. void *指针
  void * 指针表示为 无类型指针 ,作为一个指针类型,编译器已经为其妥善安排了 4 个字节的小房间。
  因此,void * 指针类型可以用来定义变量。 void *p; p = NULL;
  void * 指针虽名为无类型指针,但 可以指向任何一种类型的数据 ,即 其他类型指针的指可以不通过强制转换直接赋给 void * 指针 。 void *p; int *a; p = a; float *f; p = f;
  在 C 语言当中,对指针类型的转换要求不是那么严苛,可以不通过强制转换就可以进行相互间的赋值。 int *a = NULL; float *b = NULL; char *c = NULL; a = b; b = c; c = a;
  虽然编译器(gcc 6.3版本)不会显示有错误,编译照常会通过。只是会给出类似下面的警告:
  警告 C4133 "=": 从"float *"到"int *"的类型不兼容
  而在 C++ 当中,这一点要求就明显比较严格了。它不允许两个不同的类型指针相互赋值,除了 void * 指针。
  其他的类型指针可以把值直接赋给 void * 指针,但反过来,void * 指针的值想要赋值给其他类型的指针,也需要通过强制转换。 void *p = NULL; int *a = (int *)p; // 通过 float *b = p; // 报错
  void * 指针还有一个非常强大之处,在函数定义的时候,作为参数。当调用的时候, 无论什么类型的类型指针或数组 都可以正常运行。 #include int test(void * dst){...} int main() {   char *c = "123456";   int arr[] = {1, 2, 3, 4, 5, 6};   test(c);  // 正常编译   test(arr);  // 正常编译   return 0; }
  不过 void * 指针也有一个致命的缺点,当对该指针进行算数操作,就会显示以下这个错误。
  根据 ANSI C 标准规定,进行算数操作的指针,必须明确知道该指针所指向的数据类型大小。也就是所指向的数据,都必须是具体的类型,而不是空泛的 void 类型。 最后
  关于 C 语言 void 数据类型的内容就到此结束了。
  感谢各位的观看,如果您觉得本文章还不错,点个赞支持一下呗。
  当然,如有发现不足之处,或者错误的地方,欢迎留言指出,不胜感激!

105规划变迁从386双塔到300三件套再到260双塔来自临港大城小事(一)初始386米临港中心双子塔规划2019临港新片区招商推介会上,临港新片区001号的新注册企业上海临港新片区经济发展有限公司总经理助理逄淑光表示从产业上讲,临港省本级社保卡持卡人这批社保卡即将到期,如何换卡看这里!山东省省本级社会保障卡到期换卡有关事宜中华人民共和国社会保障卡是人力资源社会保障部统一规划,由各省市人力资源社会保障部门联合合作商业银行面向社会发行,用于人社业务及其他公共服务办理哥伦比亚大学的毅荻书斋(下)赵杰(笔名聊卿)作者在哥伦比亚大学留念。毅荻书斋设计很有特点,室内呈八卦型1996年末,亚洲周刊报道张学良从1991年起,已在哥伦比亚大学口述历史。今年10月,口述历史已经完成。文离婚四年,刘恺威情定短发美女李晓峰,女方离婚有一个儿子昨天,有多名网友偶遇了刘恺威和一女子约会,这样的偶遇已经不是第一次了,看身形还是上次在公园被偶遇的女子。两个人现身一寺庙似乎是在求姻缘,两人说说笑笑的,也不在乎被网友拍照片。上次挽赵本山儿子我卡里余额8000万,光吃利息都比你们过的好提起赵本山相信很多人都知道,尤其是他曾经活跃在春晚舞台上几十年,一度是春晚舞台上的台柱子。有人说在上世纪九十年代之前春晚舞台上的台柱子就是赵丽蓉和陈佩斯二位,而在上世纪九十年代之后颁奖礼10大搞笑名场面黄渤忘词,吴京拍照,刘德华看成龙修椅子11月12日晚举行的第35届金鸡奖颁奖仪式,朱一龙拿了影帝,奚美娟拿了影后。事后回看颁奖典礼,我发现了不少搞笑瞬间。01hr黄渤和张小斐是当晚的两位主持,喜剧演员出身的黄渤,为了活113亿!张庭夫妇吞下天价罚单战线拉了快一年时间,张庭夫妇的传销案还在继续。早在去年12月,就有媒体报道称张庭夫妇所创立的TST庭秘密涉嫌传销,相关部门已经立案调查。就在最近,关于张庭夫妇涉嫌传销的听证会正式结果然好人最后都有好报,这种好报给我来一沓前言树莓立方体作为madosoft于2018年发售的作品,时隔数年之久终于登上了steam,虽然本作在一众玩家的口中以及bgm中的体验和评分并不怎么出色,但是整体游玩体验却也没有很Steam新品节将于明年2月举行上百款试用版新游戏将至IT之家11月12日消息,Steam商城显示,Steam新品节即将回归,这是一场为即将推出的游戏推出的活动。玩家可探索并游玩上百款游戏试用版观看开发者直播和团队畅聊正在开发中且即将魔兽世界怀旧服25人宝库熊德有装备依旧roll,鸟德心态崩了大家好,我是分身有术,很高兴又跟大家见面了。相信很多人每周都会打25人宝库,这个副本除了简单,而且打得快,还掉落勇气纹章,以及各职业213装等的t7装备以及pvp装备,当然只掉落裤TPS动作MOBA虚幻争霸终测开启参与者超3万人虚幻争霸续作虚幻争霸TheOverprime于11月10日开启了最终测试。今日官方发推宣布,目前参与测试的玩家已超过3万人,并发放了游戏内奖励。参与地址虚幻争霸最初于2016年在E