C语言中指向指针的指针实践与函数导出
需积分: 9 173 浏览量
更新于2024-08-26
收藏 12KB DOCX 举报
"指向指针的指针"
在C语言中,指针是编程中非常重要的一个概念,它可以用来存储变量的地址,使得我们能够间接地访问和修改这些变量。而指向指针的指针(也称为二级指针或多级指针)则是指针的一个高级应用,它是指向指针本身的指针。这种类型的指针允许我们对指针进行更复杂的操作,例如动态分配内存、传递函数指针等。
在提供的代码中,可以看到以下几个关键知识点:
1. **函数指针**:`add` 和 `add1` 是两个整数加法的函数,它们都接受两个整数参数并返回它们的和。在C语言中,函数名可以被当作指针来使用,因此 `add` 和 `add1` 可以直接用于调用,也可以赋值给一个函数指针变量。例如,`int(*p)(int a, int b)` 就是一个函数指针类型,它能存储指向返回整数并且接受两个整数参数的函数的地址。
2. **多级指针**:在 `printf("\n%x,%x",&add,&add1);` 这一行,`&add` 和 `&add1` 分别是 `add` 和 `add1` 函数的地址,也就是函数指针的地址。这里的 `&` 操作符用于获取变量的地址,所以 `&add` 和 `&add1` 是指向函数指针的指针。
3. **函数指针赋值**:`int(*p)(int a, int b) = add;` 这行代码将 `add` 函数的地址赋给了函数指针 `p`,这样通过 `p` 我们就可以调用 `add` 函数。同理,如果 `p` 被赋值为 `add1` 的地址,那么 `p` 就可以调用 `add1`。
4. **循环调用**:在 `while` 循环中,`p(i, 1)` 被用来调用函数,并打印结果。这里 `p` 指向了某个函数(在这个例子中是 `add` 或 `add1`),每次循环会递增 `i` 的值并调用该函数,从而实现每隔两秒打印一次结果。
5. **动态链接库(DLL)函数导出**:`_declspec(dllexport) void go()` 是一个函数,它的目的是导出到动态链接库(DLL)。`void(**p)(int a, int b)` 定义了一个二级指针,它指向接受两个整数参数并返回整数的函数。通过 `(int(*)(int a, int b))0x87f7c4` 和 `(int(*)(int a, int b))0x8d1096`,可以将特定地址的函数赋值给这个二级指针,这在动态链接库中常用来指定函数入口点。
6. **系统调用**:`Sleep(2000)` 用于使程序暂停2秒钟,`system("pause")` 会在程序结束前暂停,等待用户按键,这样可以观察程序的运行结果。
以上就是关于C语言中指向指针的指针及其在实际代码中的应用。理解这一概念对于深入学习C语言和系统级编程非常重要,因为它涉及到内存管理、函数指针的传递以及动态链接库的交互等方面。
2021-10-10 上传
2022-06-20 上传
2011-08-13 上传
2023-11-14 上传
2020-06-26 上传
2023-02-16 上传
2022-12-15 上传
2013-04-16 上传
2021-09-16 上传
lostlll
- 粉丝: 806
- 资源: 16
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫