void的简单认识今天要给大家介绍的知识是C语言中void关键字的用法。在小伙伴的大部分程序中,void只用于传入不带参数的函数。或者返回无类型。但是,我们平时定义的变量都会有特定的类型,比如int、float、char等,有没有void类型的变量呢?答案是:不会,编译会出错。测试代码如下:上图中,很明显编译器不允许定义void类型的变量。变量需要占用一定的内存。由于void表示没有类型,编译器自然不知道应该为它分配多少内存,从而导致Compilationfailed。void虽然不能直接修饰变量,但是可以用来修饰指针的指向,即无类型指针void*。无类型指针是有意义的。无类型指针不一定指向无类型数据,而是可以指向任何类型。数据。void*的基本操作其实大家在使用动态内存分配的时候已经遇到过void*的使用了。我们来看一下以下标准函数的原型定义:int_Val,size_t_Size);void*malloc(size_t_Size);void*realloc(void*_Block,size_t_Size);void*calloc(size_t_Count,size_t_Size);voidfree(void*_Block);以上函数都是和内存操作相关的,而void*类型指针的使用原则是:强制类型转换为目标类型后才能使用。以下测试代码:#include#include#includeintmain(){intnum=0;void*pVoid=#printf("%d",*(int*)pVoid);//解引用前必须强制转换int*p=(int*)malloc(4);//赋值给目标指针进行类型转换return0;}使用void*实现无类型数据封装。void既然这么灵活,那肯定有用,如果单纯的传递参数显得有点大材小用,我们不得不在上层软件设计中使用它。在一些项目中,由于数据类型的不同,会重复编写大量相同的代码。为了避免这个问题,C++引入了模板模块。C语言可以通过void*类型的指针来完成。让我们通过以下示例向您介绍。这种方法可以减少由于数据类型的改变而引起的程序重复代码的增加。#include#include/*****************************************************代码长记不住怎么办?*喜欢,关注和转发*这对我来说真的很重要***************************************************/typedefstruct_tag_Add{inta;intb;intresult;}sAdd;voidAdd(void*param){sAdd*p=(sAdd*)param;p->result=p->a+p->b;}typedefstruct_tag_Mul{floata;floatb;floatresult;}sMul;voidMul(void*param){sMul*p=(sMul*)param;p->result=p->a*p->b;}voidsCal(void*param,void*fuc){((void(*)(void*))fuc)(param);}intmain(void){sAddstAdd;sMulstMul;//数据初始化stAdd.a=10;stAdd.b=20;stMul.a=5;stMul.b=5;//接口直接使用sCal(&stAdd,Add);sCal(&stMul,Mul);//对应输出printf("a+b=%d\n",stAdd.result);printf("a*b=%f\n",stMul.result);return0;}上面的例子可能还是不能充分展示void*的强大,但是它的主要功能是隐藏数据类型也可以理解为对数据类型的抽象处理,这也是面向对象编程的一种体现。最后说这么多关于void关键字的使用吧!大家一定要记得尝试使用一些编程技巧。实现项目目标的方法可能有很多种,但是一些好的设计不仅会让你的代码增色不少,同时也会让同事觉得你是一个喜欢专攻的人在技??术上。