IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 游戏筑基开发之回调函数(C语言) -> 正文阅读

[C++知识库]游戏筑基开发之回调函数(C语言)

利用结构体容器定义进行说明阐述C语言回调函数

TIPS:
void*可以存储任何无符号整型的数据且在32位操作系统中占4个字节。通常我们称void*为万能数据类型。void**相当于存储void数据所在的地址。void本身没有任何实际的含义,不能表示任何意思,因此可以理解为:值和一级指针的维度类似于void*和void*
void*另外也可简单的理解为二级指针,类似于一个指针数组。void为一级指针。void无任何实际含义。

数据结构定义如下:

typedef struct tagVector
{
    void** pArr;//void**用来存储一级指针的地址,void*用来存储值(地址)
    int nLen;
    int nLenMax;
}TVector, * PTVector;

具体实现如下:

主要利用void*、void**、函数指针的相关知识进行实现。

// 初始化容器
int VectorInit(struct tagVector** ppv)
{
    // 创建一个结构体 在堆区
    struct tagVector* pv = malloc(sizeof(TVector));
    //PTVector pv = malloc(sizeof(TVector));
    pv->nLen = 0;
    pv->nLenMax = 10;
    // 申请一个长度为10的void*内存空间
    pv->pArr = malloc(sizeof(void*) * (pv->nLenMax));
    // 返回创建的容器结构体
    *ppv = pv;
    return 1;
}

//使用typedef定义回调函数别名
typedef int(*FCallback)(void*, void*);

// 获取指定下标的数据,0表示成功,1表示失败
// 利用函数指针定义回调函数
int VectorFindValue(PTVector pv, FCallback pFunc, void* pV, int* pIndex)
{
    for (int i = 0; i < pv->nLen; ++i)
    {
        if (pFunc(pv->pArr[i], pV))
        {
            *pIndex = i;
            return 1;
        }
    }
    return 0;
}

//回调函数由使用VectorFindValue接口的人员自主定义,示例如下:
int func(void* p1, void* pV)
{
    return *(int*)p1 == *(int*)pV ? 1 : 0;//void*保存的是地址,需要强转为编程人员对应所需的数据类型
}

int main()
{
    PTVector pv;
    VectorInit(&pv);
    int a = 10;
    int index;
    VectorFindValue(pv, func, &a, &index);
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:05:17  更:2021-07-16 11:06:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 1:50:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码