18. 【C语言】函数与指针的强强联合

C++26合约编程与静态分析工具适配:构建高可靠系统软件的关键路径 在系统软件开发中,静态分析工具通过解析抽象语法树(AST)和控制流图(CFG),在不运行程序的情况下识别潜在缺陷,是保障代码质量的核心技术。其原理在于对源代码进行数据流和控制流分析,从而推理出程序可能存在的逻辑错误。随着C++26正式引入合约编程,语言级别的前置条件、后置条件和断言机制为代码约束提供了标准化表达,这为静态分析带来了新的技术价值:工具若能深度理解合约语义,便能将程序员的设计意图转化为精确的分析假设,从而大幅提升缺陷检测的准确率。在汽车电子、工业控制等安全关键领域,这种增强的分析能力能直接应用于 阅读详情

前面我们已经分别征服了函数(第十二篇)和指针(第十五、十六篇)。当时我还卖了个关子——函数本身也能被指针指向,而且这种“函数指针”能让你写出高度灵活、可插拔的代码。今天,我们就来把这最后一块拼图补上。

这篇文章会让你理解:如何把函数当作参数传给另一个函数(这正是回调的底层原理),如何用函数指针实现策略模式,以及那个让人头疼的“信号函数”声明到底怎么读。学完之后,你看很多 C 库的源码(比如 qsort、信号处理)就不会再一头雾水。


一、函数也有地址:指向函数的指针

和数组一样,函数在内存中也是一段连续的二进制指令,自然也有起始地址。函数名在表达式中会被转换成这个地址——就像数组名被转换成首元素地址一样。

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main(void) {
    printf("%p\n", (void*)add);   // 打印函数地址
    return 0;
}

既然函数有地址,就可以用指针来存它。这就是函数指针。

声明函数指针

函数指针的声明格式,就是把函数声明中的函数名换成 (*指针名):

// 普通函数声明
int add(int a, int b);

// 对应的函数指针声明
int (*func_ptr)(int a, int b);   // func_ptr 是指向“返回int、接收两个int”函数的指针

读法:func_ptr 是一个指针,指向一个接收两个 int、返回 int 的函数。

让指针指向函数并调用:

int (*fp)(int, int);   // 声明
fp = add;               // 赋值(add 和 &add 等价)
// 或 fp = &add;

int result = fp(3, 5);  // 通过指针调用,等价于 add(3, 5)
printf("%d\n", result); // 8

函数指针可以像普通函数一样直接加括号调用,fp(3,5) 和 (*fp)(3,5) 都可以。


二、函数指针作为参数:回调函数

函数指针真正的威力在于:把函数当作参数传给另一个函数。这样,被调用的函数可以在适当的时候“回调”你传进去的函数。这在需要通用化操作时极其有用。

回想第十篇,我们写过冒泡排序,但那个排序只能排 int,而且只能升序。如果我想让它能排 double,或者能由用户指定升序还是降序,就要用函数指针。

模拟 qsort 的冒泡排序:

#include <stdio.h>
#include <stdbool.h>

typedef bool (*compare_fn)(int, int);   // 用 typedef 简化类型名

bool ascending(int a, int b)  { return a > b; }   // a>b 说明需要交换
bool descending(int a, int b) { return a < b; }

void bubble_sort(int arr[], int n, compare_fn cmp) {
    for (int i = 0; i < n - 1; i++) {
        bool swapped = false;
        for (int j = 0; j < n - 1 - i; j++) {
            if (cmp(arr[j], arr[j+1])) {   // 调用回调函数决定是否交换
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

int main(void) {
    int arr[] = {5, 2, 8, 1, 9};
    int n = sizeof(arr) / sizeof(arr[0]);

    bubble_sort(arr, n, ascending);
    printf("升序: ");
    for (int i = 0; i < n; i++) printf("%d ", arr[i]);
    printf("\n");

    bubble_sort(arr, n, descending);
    printf("降序: ");
    for (int i = 0; i < n; i++) printf("%d ", arr[i]);
    printf("\n");

    return 0;
}

输出:

升序: 1 2 5 8 9 
降序: 9 8 5 2 1 

同一个 bubble_sort,通过传入不同的比较函数,就能改变排序行为。这就是策略模式在 C 语言里的实现——函数指针就是策略的载体。

标准库的 qsort 正是这样做的:

void qsort(void *base, size_t nmemb, size_t size,
           int (*compar)(const void *, const void *));

它使用 void* 实现通用类型,再配合函数指针完成比较操作,是函数指针最经典的应用。


三、typedef 简化函数指针类型

函数指针的语法写起来有点啰嗦,每次写 int (*)(int, int) 容易出错。typedef 是解决这个问题的利器。

typedef int (*operation_fn)(int, int);  // operation_fn 是一个类型名

operation_fn fp = add;   // 简洁!

这比 int (*fp)(int, int) = add; 好读得多。以后凡是见到 typedef 返回类型 (*类型名)(参数列表); 的写法,就知道是在给函数指针类型取别名。

再看一个更直观的例子——简单计算器:

#include <stdio.h>

typedef int (*calc_fn)(int, int);

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) { return (b != 0) ? a / b : 0; }

int calculate(int x, int y, calc_fn op) {
    return op(x, y);
}

int main(void) {
    printf("10 + 5 = %d\n", calculate(10, 5, add));
    printf("10 - 5 = %d\n", calculate(10, 5, sub));
    printf("10 * 5 = %d\n", calculate(10, 5, mul));
    printf("10 / 5 = %d\n", calculate(10, 5, div));
    return 0;
}

calculate 完全不知道具体运算是什么,它只负责在合适的时机调用传入的函数指针。核心逻辑和具体操作彻底解耦。


四、函数指针数组:函数表的雏形

如果有一组同类型的函数,可以放进函数指针数组,用下标来选择执行哪个。这在实现菜单驱动、状态机、命令解析时非常常见。

#include <stdio.h>

typedef void (*command_fn)(void);

void cmd_new(void)   { printf("新建文件\n"); }
void cmd_open(void)  { printf("打开文件\n"); }
void cmd_save(void)  { printf("保存文件\n"); }
void cmd_quit(void)  { printf("退出程序\n"); }

int main(void) {
    command_fn menu[] = {cmd_new, cmd_open, cmd_save, cmd_quit};
    int choice;
    printf("0-新建 1-打开 2-保存 3-退出\n请输入选择: ");
    scanf("%d", &choice);

    if (choice >= 0 && choice <= 3) {
        menu[choice]();   // 通过下标调用对应的函数
    } else {
        printf("无效选择\n");
    }
    return 0;
}

这种“函数表”的设计,让添加新命令变得极为简单——只需写新函数,再把它加入数组即可,不用改任何 if-else 或 switch 逻辑。


五、常见错误与陷阱

1. 函数指针类型不匹配

int add(int a, int b) { return a + b; }
double (*fp)(double, double) = add;  // 错误!返回类型和参数类型都不匹配

函数指针赋值时,类型必须完全一致。如果确实需要转换,必须显式强制转换(且后果自负)。

2. 忘记写括号

int *fp(int, int);        // 这是函数声明,返回 int*,不是函数指针!
int (*fp)(int, int);      // 这才是函数指针

括号是函数指针声明的灵魂,丢了它语义就彻底变了。

3. 对函数指针使用 sizeof

sizeof(add);   // 非法!不能对函数名使用 sizeof

sizeof 只能用于对象类型,不能用于函数。

4. 解引用函数指针时的困惑

int (*fp)(int, int) = add;
fp(3, 4);      // ✅ 可以直接调用
(*fp)(3, 4);   // ✅ 也可以解引用后调用
(**fp)(3, 4);  // ✅ 甚至这样也行!

因为函数名本身就是地址,解引用后还是函数类型,又会自动转回地址。所以怎么写都能跑。不用纠结形式,直接用指针名加括号调用最简洁。


六、小结与下篇预告

今天我们把函数和指针结合了起来。核心收获:

  • 函数在内存中有地址,函数名就是地址。
  • 函数指针声明格式:返回类型 (*指针名)(参数类型列表);
  • 用 typedef 简化函数指针类型,告别复杂声明。
  • 函数指针作为参数,实现回调,是策略模式和解耦的利器。
  • 函数指针数组可以用来构建简单的函数表,避免冗长的条件分支。

理解函数指针,你就推开了通往高阶 C 编程的一扇大门。标准库的 qsort、bsearch、signal 都依赖它,大型项目中的插件架构、中断向量表也离不开它。

到目前为止,我们所有的数据——数组也好、字符串也罢——都是在编译时就定好大小的。但如果程序运行时才知道需要多少内存呢?比如用户的输入长度不确定,或者要根据数据库查询结果动态创建数据结构。这就是下一篇的主题:动态内存分配。malloc、free、calloc、realloc,以及堆与栈的根本区别。那是 C 语言又一块充满力量与危险的领域,准备好你的指针知识,我们将长驱直入。


课后小练习

  1. 写一个函数 apply(int arr[], int n, int (*fn)(int)),对数组的每个元素调用 fn,将返回值写回原位置。测试:写一个 square 函数,将数组元素变成它的平方。
  2. 用函数指针数组实现一个简单的加减乘除计算器,用户输入两个数和运算符(+、-、*、/),程序通过查表调用对应函数输出结果。
  3. 解释以下声明的含义:
    int  (*p1)(int, int);
    int  *p2(int, int);
    int  (*p3[4])(int, int);
    int  (**p4)(int, int);
    
    提示:用右左法则,或从变量名向外读。
  4. (小挑战)自己实现一个简化版的 qsort,名字叫 my_qsort,支持对 int 数组排序,接收一个比较函数指针作为参数。用你自己的排序算法(冒泡或选择排序),体验回调函数的实际运用。

我们下期见!

💡获取本系列示例代码请访问 GitCode 仓库。

LVGL v8.3 图片显示与解码缓存实战:PNG 上屏、C 数组与文件双方案 LVGL v8.3 图片两种存储方式、PNG/JPG 上屏解码器挂载、LV_IMG_CACHE_DEF_SIZE 缓存调优、手动预解码头像有效性判断,及"缓存被动画清空"真实踩坑。 阅读详情

相关推荐

利用MATLAB 4f光学系统,在Python中进行弗劳恩霍夫衍射和傅里叶面滤波——用镜头模拟光学图像处理。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

C++函数模板:从类型参数化到泛型编程的实战指南

泛型编程是现代编程语言中的核心范式,它通过将数据类型参数化,实现了算法与数据结构的解耦。其核心原理是编译器在编译期根据具体类型自动生成特化代码,从而在保证类型安全的同时实现零运行时开销。这一技术极大地提升了代码的复用率与可维护性,是构建通用库和框架的基石。在C++中,函数模板是实践泛型编程的基础工具,它允许开发者编写独立于具体类型的通用算法。例如,通过模板实现的swap函数,可以安全高效地交换任意类型的数据,避免了为每种类型重复编写相似代码。掌握函数模板的声明、实例化、特化以及与SFINAE、C++20概念

weixin_34005042的博客 308

利用MATLAB和Excel对逆流双管热交换器的热性能进行分析。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

TileLang与沐曦GPU:国产高性能计算新突破

领域专用语言(DSL)如TileLang通过提供更接近硬件底层的编程抽象,显著优化了张量计算和深度学习任务的性能。其语法结构直接映射到GPU的线程块和共享内存组织方式,减少了传统GPU编程中的线程同步和内存管理开销。沐曦GPU凭借MXMACA架构和特殊的指令调度器,能够高效执行TileLang代码,实现接近国际主流GPU的性能表现。在MLPerf基准测试中,沐曦MX150与NVIDIA A100相比,能效提升18.4%,展示了国产GPU在高性能计算领域的潜力。TileLang特别适用于矩阵运算、深度学习和大

weixin_34204722的博客 339

利用MATLAB对5G NR波束成形技术的性能分析.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

上市公司赫芬达尔指数、企业勒纳指数(1999-2025年)

上市公司赫芬达尔指数(HHI)和勒纳指数(LI)是衡量市场结构和市场势力(垄断力量)的两个重要指标 赫芬达尔指数(HHI)可衡量一个公司在市场中的相对份额或集中度,通过计算公司在市场中份额的平方和得出。数值越小,说明市场份额分布越分散,竞争程度越高;数值越大,说明市场集中度越高,少数企业占据较大份额,垄断程度越高 勒纳指数(LI)用于衡量企业的市场势力,即企业偏离完全竞争价格、制定高于边际成本的价格的能力,数值越接近1,表示企业市场势力越强,垄断程度越高 本文借鉴刘贯春等(2021)、孙茹峰和李楠博(2024)的思路和方法,分别测算上市公司赫芬达尔指数、勒纳指数: 赫芬达尔指数 = (公司营业收入/同行业同年营业收入合计)的平方和 企业勒纳指数 =(营业收入-营业成本-销售费用-管理费用)/营业收入 一、数据介绍 数据名称:上市公司赫芬达尔指数、企业勒纳指数 数据范围:上市公司 时间范围:1999-2025年 样本数量:85810条 数据来源:上市公司年报 更新时间:2026年11月 数据说明:内含原始数据、测算结果 二、数据指标 股票代码 股票简称 年份 省份 城市 区县 省份代码 城市代码 区县代码 行业代码 行业名称 赫芬达尔指数 勒纳指数 营业收入 营业成本 销售费用 管理费用 三、参考文献 [1]刘贯春,叶永卫,张军.社会保险缴费、企业流动性约束与稳就业——基于《社会保险法》实施的准自然实验[J].中国工业经济,2021,(05):152-169. [2]孙茹峰,李楠博.金融化对企业绿色转型意向的影响研究[J].管理学报,2024,21(11):1612-1620+1677. [3]张倩肖,段义学.数字赋能、产业链整合与全要素生产率[J].经济管理,2023,45(04):5-21. [4]伍兆祥,代吉林,

static 的三种用法:C 语言里一个关键字的三张面孔

本文系统讲解 C 语言中 static 关键字的三种用法:修饰局部变量延长生命周期、修饰全局变量与函数限制作用域到本文件。通过一个包含三个文件的完整工程示例对照演示,并从存储期、作用域与链接性三个属性解释其统一原理,最后补充单元测试框架偏爱 static 函数的工程实践。

大模型全栈工程师 · Thanks_ks 298

海康威视后台摄像头视频管理系统

海康威视后台摄像头视频管理系统,vue+py框架

【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c

AI 编程时代,开发语言选型需综合考量AI适配度、编译速度、跨平台与学习成本。Python以海量语料和即时执行成首选,适用于AI/ML与原型开发;TypeScript凭借类型系统与秒级构建,成为前端及应用层主流;Go以极速编译与统一风格,契合AI代理高效迭代需求。Rust/C++虽性能强,但编译慢、学习成本高,不适于快速试错。综合推荐:优先选Python、TypeScript、Go,兼顾效率与生态,实现最优AI协作体验。

freewebsys的专栏 484

esp-labs-web- 把 ESP32-S3 实验台搬进浏览器:交互式学习指南

esp-labs-web项目把 ESP32-S3 的实验台教程做成了一个网页应用,叫 ESP32 Labs,里面有 32 个动手实验,带实时模拟器、3D 板子、引脚图,还有一个能逐行讲固件的代码阅读器。 每个实验就是一张单子,写着目标、用到的引脚在实时引脚图上的位置、接线、烧录命令和要打勾的步骤,旁边还有个模拟器,能先在浏览器里看到应该出现的效果。 模拟串口也挺像回事,在里面敲个命令,板子会像真固件一样回你,不用先把硬件接好就能先练一遍。 代码阅读器读的是实验真正烧进去的固件,Tour 模式一次只走几行,还先让你猜,Story 模式跟着程序从 setup() 一路往下走,Explore 是点哪行讲哪行,生词一次只给三个,词典还会记住你见过的词。 语言做了 8 种,英法西意德中日阿都有,阿拉伯语还是从右往左排版,手机 390 像素宽也能用,浅色深色、减动效都照顾到了。 里面还有个 3D 的 DevKitC-1 板子,六个标注点一点就亮,还会列出用它的实验,实验台日志就是 public/data 里的一份普通 JSON,改了不用重新编译,学习进度只存在你自己浏览器里,不用注册账号。 实验主题分得挺全,入门、显示和按键、Wi-Fi、RFID、蓝牙、声音都有,传感器那块还是计划中,每个实验的固件都是 esp-labs 里独立的 PlatformIO 工程。

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

【选址和定容】模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用【IEEE69节点】(Matlab代码实现)

内容概要:本文研究了模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用,以IEEE69节点配电系统为算例进行仿真分析。通过融合模拟退火算法的强全局搜索能力与粒子群算法的高效局部收敛特性,构建了一种改进的多目标优化算法,用于解决分布式电源在配电网中的最优位置选择与容量配置问题。研究旨在实现多重优化目标,包括最小化网络有功损耗、提升节点电压质量、增强系统运行的经济性与稳定性。文中详细阐述了多目标优化模型的数学构建、算法的改进机制与实现流程,并基于Matlab平台完成了算法编程与仿真验证,结果表明所提方法在求解质量和收敛性能上均优于传统算法。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事配电网规划、分布式能源系统优化、智能优化算法应用等相关领域的科研人员、工程师以及高校研究生。; 使用场景及目标:①解决高比例分布式电源接入背景下配电网的科学规划问题;②为新型电力系统中源网协调设计提供有效的优化工具;③为相关领域的科研工作提供可复现、可拓展的算法模型与仿真代码实例,支持进一步的算法对比与功能升级。; 阅读建议:建议读者结合提供的Matlab代码与IEEE69节点标准数据,动手复现实验结果,深入理解算法的参数设置、迭代过程与多目标折衷分析方法,并可根据实际研究需求修改目标函数或引入新的约束条件以适应不同的应用场景。

从Elasticsearch的jvm.options读懂JVM参数的生效核验、内存分账与诊断兜底代码包

拿到一台机器和一个 Java 服务,怎样确认 JVM 实际吃进去了哪些参数,怎样给堆和堆外分配内存,怎样把 GC 日志、堆转储、异常栈这些“事后取证”的参数配齐,以及怎样在 JDK 8 与 JDK 9+ 之间安全迁移。 讲解的抓手是 Elasticsearch(下文简称 ES)的 jvm.options。这份文件经过 ES 团队多年打磨,又被无数生产集群验证过,几乎每一行都对应一个踩过的坑,是学习 JVM 参数最好的“样板间”。

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

无刷直流电机BLDC无感+滑模观测器+转速电流双闭环PI控制(总共三个仿真模型)(Simulink仿真实现)

内容概要:本文档系统性地提供了无刷直流电机(BLDC)的高级控制策略仿真资源,聚焦于无位置传感器控制技术,重点实现了基于滑模观测器(SMO)的转子位置估算方法,并结合转速与电流双闭环PI控制结构,构建了完整的Simulink仿真模型体系。资源包含三个核心仿真模型:无感控制下的滑模观测器设计、双闭环PI控制器的参数整定与动态调节,以及系统整体的运行性能仿真分析。文档深入剖析了滑模观测器在反电动势提取与相位补偿中的关键技术,展示了其在不同工况下对电机启动、调速及负载扰动响应的鲁棒性表现,旨在帮助研究人员掌握BLDC在无传感器条件下的高精度控制实现路径,并为进一步引入模糊PID等先进控制策略提供对比基准与技术支撑。; 适合人群:具备电机控制理论基础、自动控制原理知识及Simulink建模经验,从事电气工程、自动化、电力电子或新能源驱动系统研究的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①深入理解无刷直流电机无位置传感器控制的基本原理与实现流程;②掌握滑模观测器在转子位置与速度估算中的设计方法及其抗干扰特性;③学习并优化转速电流双闭环PI控制结构,提升系统动态响应性能与运行稳定性。; 阅读建议:建议结合Simulink模型进行同步仿真操作,重点关注滑模观测器的抖振抑制效果、系统启动过程的稳定性以及PI参数调节对动态性能的影响,同时可参照文档中提及的模糊PID等对比方案,拓展对先进控制算法的研究与实践应用。

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1039
上一篇: 17. 【C语言】字符串的本质:字符指针与字符串处理
下一篇: 19. 【C语言】动态内存分配
gugucoding
博客等级 码龄140天 7粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值