轉(zhuǎn)自 | 最后一個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 //進行內(nèi)存copy 21 memcpy(p2,p1,NUM*sizeof(int)); 22 23 //輸出另外一個分配的內(nèi)存 24 for(i = 0;i < NUM;i++) 25 { 26 printf("%d,",*(p2+i)); 27 } 28 //釋放內(nèi)存 29 free(p1); 30 free(p2); 31 return 0; 32}
運行結(jié)果:
3、使用void * 實現(xiàn)無類型數(shù)據(jù)封裝
參考實例:
1#include2#include 3/********************************** 4 * Fuction : add 5 * descir : 加法的相關(guān)數(shù)據(jù)及處理辦法 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 : 乘法的相關(guān)數(shù)據(jù)及處理辦法 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 : 公共的調(diào)用接口 41 * Author : (公眾號:最后一個bug) 42 ************************************/ 43void sCal(void *param,void *fuc) 44{ 45 ((void (*)(void*))fuc)(param); 46} 47 48/********************************** 49 * Fuction : main 50 * descir : 應(yīng)用接口實例 51 * Author : (公眾號:最后一個bug) 52 **********************************/ 53int main(void) 54{ 55 sAdd stAdd; 56 sMul stMul; 57 58 //數(shù)據(jù)初始化 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 //對應(yīng)的輸出 68 printf("a + b = %d\n",stAdd.result); 69 printf("a * b = %f\n",stMul.result); 70 printf("公眾號:最后一個bug\n"); 71 return 0; 72 }
運行結(jié)果:
上面的例子可能還是無法完全彰顯void*的強悍之處了,不過其主要的作用就是為了隱藏數(shù)據(jù)類型,大家也可以理解為一種數(shù)據(jù)類型的抽象處理,這也是面向?qū)ο缶幊痰囊环N體現(xiàn)。分析一下:
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!