同事用void把我給秀翻了!
掃描二維碼
隨時(shí)隨地手機(jī)看文章
上面這些函數(shù)都是與內(nèi)存操作有關(guān)的函數(shù),可能一些小伙伴使用過(guò)也不一定知道每個(gè)參數(shù)的具體類型是什么,這些void*部分的形參所傳入的實(shí)參都是不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)化的,所以根本就不需要關(guān)注傳入指針?biāo)赶虻木唧w類型,然而函數(shù)所返回的void *一般都需要通過(guò)強(qiáng)制類型轉(zhuǎn)化為對(duì)應(yīng)的具體類型,除非你最后所傳遞的變量也是void*類型。
參考void*用法:
1#include <stdio.h>
2#include <stdlib.h>
3#include <malloc.h>
4
5#define NUM 10
6/*************************************
7 * Fuction:了解一下void*的使用
8 * Author : (公眾號(hào):最后一個(gè)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 //進(jìn)行內(nèi)存copy
21 memcpy(p2,p1,NUM*sizeof(int));
22
23 //輸出另外一個(gè)分配的內(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}
運(yùn)行結(jié)果:
參考實(shí)例:
1#include <stdio.h>
2#include <stdlib.h>
3/**********************************
4 * Fuction : add
5 * descir : 加法的相關(guān)數(shù)據(jù)及處理辦法
6 * Author : (公眾號(hào):最后一個(gè)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 : (公眾號(hào):最后一個(gè)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 : (公眾號(hào):最后一個(gè)bug)
42 ************************************/
43void sCal(void *param,void *fuc)
44{
45 ((void (*)(void*))fuc)(param);
46}
47
48/**********************************
49 * Fuction : main
50 * descir : 應(yīng)用接口實(shí)例
51 * Author : (公眾號(hào):最后一個(gè)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 //對(duì)應(yīng)的輸出
68 printf("a + b = %d\n",stAdd.result);
69 printf("a * b = %f\n",stMul.result);
70 printf("公眾號(hào):最后一個(gè)bug\n");
71 return 0;
72 }
運(yùn)行結(jié)果:
分析一下:
本文授權(quán)轉(zhuǎn)載自公眾號(hào)“最后一個(gè)bug”,作者未知bug
-END-
推薦閱讀
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!






