void的多种用法
扫描二维码
随时随地手机看文章
转自 | 最后一个bug
1、简单认识一下void
2、void * 基本操作
参考void*用法:
1#include2#include 3#include 4 5#define NUM 10 6/************************************* 7 * Fuction:了解一下void*的使用 8 * Author : (公众号:最后一个bug) 9 *************************************/ 10int main(int argc, char *argv[]) { 11 int *p1 = (int *)malloc(NUM*sizeof(int)); 12 int *p2 = (int *)malloc(NUM*sizeof(int)); 13 int i = 0; 14 15 //初始化p1 16 for(i = 0;i < NUM;i++) 17 { 18 *(p1+i) = i; 19 } 20 //进行内存copy 21 memcpy(p2,p1,NUM*sizeof(int)); 22 23 //输出另外一个分配的内存 24 for(i = 0;i < NUM;i++) 25 { 26 printf("%d,",*(p2+i)); 27 } 28 //释放内存 29 free(p1); 30 free(p2); 31 return 0; 32}
运行结果:
3、使用void * 实现无类型数据封装
参考实例:
1#include2#include 3/********************************** 4 * Fuction : add 5 * descir : 加法的相关数据及处理办法 6 * Author : (公众号:最后一个bug) 7 **********************************/ 8typedef struct _tag_Add 9{ 10 int a; 11 int b; 12 int result; 13}sAdd; 14 15void Add(void *param) 16{ 17 sAdd *p = (sAdd *) param; 18 p->result = p->a + p->b; 19} 20/********************************** 21 * Fuction : add 22 * descir : 乘法的相关数据及处理办法 23 * Author : (公众号:最后一个bug) 24 **********************************/ 25typedef struct _tag_Mul 26{ 27 float a; 28 float b; 29 float result; 30}sMul; 31 32void Mul(void *param) 33{ 34 sMul *p = (sMul *) param; 35 p->result = p->a * p->b; 36} 37 38/************************************* 39 * Fuction : sCal 40 * descir : 公共的调用接口 41 * Author : (公众号:最后一个bug) 42 ************************************/ 43void sCal(void *param,void *fuc) 44{ 45 ((void (*)(void*))fuc)(param); 46} 47 48/********************************** 49 * Fuction : main 50 * descir : 应用接口实例 51 * Author : (公众号:最后一个bug) 52 **********************************/ 53int main(void) 54{ 55 sAdd stAdd; 56 sMul stMul; 57 58 //数据初始化 59 stAdd.a = 10; 60 stAdd.b = 20; 61 62 stMul.a = 5; 63 stMul.b = 5; 64 //接口直接用 65 sCal(&stAdd,Add); 66 sCal(&stMul,Mul); 67 //对应的输出 68 printf("a + b = %d\n",stAdd.result); 69 printf("a * b = %f\n",stMul.result); 70 printf("公众号:最后一个bug\n"); 71 return 0; 72 }
运行结果:
上面的例子可能还是无法完全彰显void*的强悍之处了,不过其主要的作用就是为了隐藏数据类型,大家也可以理解为一种数据类型的抽象处理,这也是面向对象编程的一种体现。分析一下:
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!