刚学C语言的时候,最搞不懂的就是c语言void什么意思,总觉得这个关键字凭空出现,写函数时加不加全凭感觉。
那时候照着网课代码抄,别人函数开头写void,我就无脑照搬,压根不知道作用,还经常因为乱改这个关键字报错,调试半天找不到问题。
c语言void用于函数返回值
最开始踩的最大的坑,就是把带返回值的函数和void函数混着用。一开始天真以为所有C语言函数都必须有return语句,每次写完自定义函数,不管功能是什么,都要强行加一句return0,结果程序直接报错,编译工具提示语句多余。
折腾好久才搞明白,void修饰函数的核心作用,就是告知编译器这个函数执行完后,不会返回任何数据。这种函数只负责执行固定操作,比如打印文字、修改变量数值、循环执行指令,不需要给主函数传回结果。
之前写过一个打印九九乘法表的函数,一开始没加void,随便定义成int类型,运行虽然不报错,但必须写return语句,完全多此一举。后来改成void定义函数,直接省略return,代码变得简洁,也完全不会出现语法冲突,这才摸透了最基础的用法。
很多新手和我一样,纠结要不要写return,本质就是没分清void函数和有返回值函数的区别,白白浪费大量调试时间。
c语言void用于指针类型修饰
除了修饰函数,void还能修饰指针,这是我后期进阶学习时踩的第二个坑。
起初完全不懂void指针的特殊性,以为指针都要绑定固定的数据类型,int指针只能存整型地址,char指针只能存字符型地址,看到void*指针直接一脸茫然,不敢随便使用。
后来实操项目里用到内存拷贝函数,才发现void指针是通用指针类型,它可以接收任意数据类型的地址,不限制具体数据格式。唯一的短板是,无法直接解引用取值,必须强制转换成对应类型指针才能操作。
我之前试过直接对void指针取值,编译器直接抛出错误,查了资料才知道,void无具体数据长度,系统没法判定读取多少字节的数据,这也是它和常规指针最核心的区别。
很简单,void就是空类型。
学了这么久最遗憾的是,初期总想着死记硬背语法,没有亲手敲代码试错,导致基础知识点卡了很久才吃透。