同事用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获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!