同事用void把我給秀翻了!
時間:2020-08-07 11:41:27
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]1、簡單認識一下void 今天跟大家介紹的知識是C語言中的void關鍵字的用法,void在大部分小伙伴的程序中都只是用于函數無參數傳入,或者無類型返回。 然而我們平時所定義的變量都會有具體的類型,int,float,char等等,那是否有void類型的變量呢?大家可以動手
上面這些函數都是與內存操作有關的函數,可能一些小伙伴使用過也不一定知道每個參數的具體類型是什么,這些void*部分的形參所傳入的實參都是不需要進行強制類型轉化的,所以根本就不需要關注傳入指針所指向的具體類型,然而函數所返回的void *一般都需要通過強制類型轉化為對應的具體類型,除非你最后所傳遞的變量也是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 : (公眾號:最后一個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}
運行結果:
參考實例:
1#include <stdio.h>
2#include <stdlib.h>
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 }
運行結果:
分析一下:
本文授權轉載自公眾號“最后一個bug”,作者未知bug
-END-
推薦閱讀
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!