详解C语言数据类型之void类型
在程序中,每一个变量都应该有相应的数据类型,数据的类型决定了编译器可以为之开辟多少的空间来存放数据。
例如:int类型需要4个字节,char类型需要1个字节,指针类型需要4个字节等等。
但C语言中还有一种特殊的数据类型void。1。void介绍
void表示为无、空、没有的意思。
在这里就把void理解为啥也不是。
作为一个数据类型,如果用void声明变量会是什么情况呢?
编译器要给数据分配多少的内存空间,是要依据变量定义时的数据类型。
而void类型比较特殊。虽然也是一种数据类型,但不确定性太强了。
如果可以用void声明变量,你要是开心先给个int整型的数据,不开心再给个char字符型的数据,或者double类型的数据。
这要求的内存空间一会儿大,一会儿小的,编译器也很难办。
内存就那么点,经不起这么折腾。
因此,void数据类型是不能直接用在变量声明的。
那么void应该被用在哪里呢?2。函数的参数
void最常使用就是用在函数里面,第一个就是函数的参数。
通常会看到如下的函数原型定义:intfunc(void);intfunc();
这两个函数表示的意义是一样的,都是无参数、返回值为int类型的函数。
但有一点不同。根据不同的编译器,对语法检验严格程度也有所不同。用g编译就有可能出现以下的情况:intfunc1(void){return1;}intfunc2(){return2;}intmain(){func1();func2();func1(123);errorfunc2(123);func1(3。14);errorfunc2(3。14);return0;}
参数部分为void的函数,在调用函数的时候,有传入实际参数的时候会产生报错,传入的参数太多了!实际上参数为void的函数是不能传入任何类型的参数。
而参数部分啥都没有的函数,调用函数的时候可以传入任意类型是不会报错的。
不过这个问题大体上没有人会这么做,因为毫无意义。3。函数的返回类型
void的另一个作用,就是在函数的返回类型上面。
有时候,我们只需要函数运行的过程,而不是为了获取最后的结果。此时就可以使用void类型,表示该函数没有返回值。
例如:我只想交换a和b两个变量分别存储的数据。includestdio。hvoidswap(inta,intb){inttemp;tempa,ab,btemp;}intmain(){inta3,b5;swap(a,b);printf(ad,bd,a,b);return0;}
运行结果:a5,b3
一般在void定义的函数里面,return是多余的。不过,即便加上return返回值(gcc6。3版本中),也对函数没有什么影响。
既无法重新使用其他数据类型定义的变量来接收函数的返回值,也不能在printf函数中使用的。
4。void指针
void指针表示为无类型指针,作为一个指针类型,编译器已经为其妥善安排了4个字节的小房间。
因此,void指针类型可以用来定义变量。voidp;pNULL;
void指针虽名为无类型指针,但可以指向任何一种类型的数据,即其他类型指针的指可以不通过强制转换直接赋给void指针。voidp;inta;pa;floatf;pf;
在C语言当中,对指针类型的转换要求不是那么严苛,可以不通过强制转换就可以进行相互间的赋值。intaNULL;floatbNULL;charcNULL;ab;bc;ca;
虽然编译器(gcc6。3版本)不会显示有错误,编译照常会通过。只是会给出类似下面的警告:
警告C4133:从float到int的类型不兼容
而在C当中,这一点要求就明显比较严格了。它不允许两个不同的类型指针相互赋值,除了void指针。
其他的类型指针可以把值直接赋给void指针,但反过来,void指针的值想要赋值给其他类型的指针,也需要通过强制转换。voidpNULL;inta(int)p;通过floatbp;报错
void指针还有一个非常强大之处,在函数定义的时候,作为参数。当调用的时候,无论什么类型的类型指针或数组都可以正常运行。includestdio。hinttest(voiddst){。。。}intmain(){charc123456;intarr〔〕{1,2,3,4,5,6};test(c);正常编译test(arr);正常编译return0;}
不过void指针也有一个致命的缺点,当对该指针进行算数操作,就会显示以下这个错误。
根据ANSIC标准规定,进行算数操作的指针,必须明确知道该指针所指向的数据类型大小。也就是所指向的数据,都必须是具体的类型,而不是空泛的void类型。最后
关于C语言void数据类型的内容就到此结束了。
感谢各位的观看,如果您觉得本文章还不错,点个赞支持一下呗。
当然,如有发现不足之处,或者错误的地方,欢迎留言指出,不胜感激!
一个玩弄6大男星,一个辗转5位女友,他俩结合,谁赢谁输?1月31日,有媒体拍到演员任重和主持人孙骁骁一同出行,孙骁骁走路十分小心,小腹隆起疑似已经怀孕。当天,任重和孙骁骁相处十分融洽,两人去火锅店打包餐食,随后一同前往女方家与其父母一起
1月份不认证停发养老金?别信近日,2023年养老金认证时间提前,退休人员必须在1月份完成待遇资格认证,否则养老金将会停发的消息在多地流传,引起社会广泛关注,有的网友担心是因为养老金不足。这是真的吗?针对此说法
狂飙的高启强,一个经典的中国个体户样本个体户的至暗时刻。文巴九灵(微信公众号吴晓波频道)菜市场的鱼贩高启强斜倚着凳子,扬起下巴跟眼前的流氓谈判,震慑他们不要再欺负自己开音像店的弟弟,背后的手却在微微发抖。他的勇气和胆怯
狂飙既有正剧光环,也有江湖片风范!看众多戏骨飙戏真过瘾!全民探讨的热播剧狂飙昨晚大结局,以9。0圆满收官。真是好久没看过这么带感这么吸引人,可以一家人围坐在一起追剧观看的电视剧了!上一次出现这种全家追剧的情况还是人民的名义。这两部剧有很
胡鑫宇说的是想要回家,笔记来的太突然,录音笔才是关键胡鑫宇进入致远中学之后,成绩排名不理想,学习压力大,感到吃力,向老师家人说过自己想要回家,不想读书。对于他的自杀,失踪前可谓一点征兆都没有。致远中学地处铅山县城区,交通肯定是很方便
狂飙里面戴了什么手表?最近半个月,国产电视剧狂飙上映,凭借真实改编的故事逼真的演技,俘获了众多观众。京海市一线刑警安欣(张译饰),在与黑恶势力的斗争中,不断遭到保护伞的打击,始终无法将犯罪分子绳之以法。
50天守护!巴掌大早产儿被成功救治来源黔南州卫生健康局头条新闻最近黔南州人民医院新生儿科成功抢救一例出生体重仅800多克的早产儿宝宝历经50天的悉心照护终于回到了宝爸宝妈的怀抱近日,黔南州人民医院新生儿科收治了一对
警惕!1岁男童险丧命,只因吃了它,很多人家里都有来源羊城晚报瓜子花生开心果腰果这些坚果很受大家欢迎尤其刚刚过去的春节谁家还能不备点儿坚果?然而一不小心它们也可能会成为致命的凶手最近深圳就发生了惊险一幕!吃开心果时玩耍摔倒深圳1岁
什么时候建大卡?有什么用?准妈妈看这篇就够了钱江晚报小时新闻记者何丽娜通讯员姜洁斯怀孕后建卡对于孕期来说是一件非常重要的事情,建卡以后需要进行孕期管理,这关系着妈妈和胎儿的健康。准妈妈们需要建的是张怎样的卡?有什么用?又该如
东北往事成为一个文化符号,响彻在魔性的网络流行语里老司机如我,什么游戏没见过,却被一个游戏惊到。没有特别隆重预热,它横空出世。机哥首页好多人转发,我一脸懵地点进去,再一脸释然地出来。光是游戏名字就很有味道,叫东北之夏。通常,东北这
制作兔子灯品尝烤全羊这份游玩攻略请收好春节假期,走进乡村郊野,入住民宿品尝美食体验趣味活动开启惬意微度假,成为不少市民的首选。在山阳田园景区,游客可以尽情体验制作兔子灯品尝烤全羊手冲咖啡等丰富的游玩项目,让我们一起去看