1. 指针与函数:C语言的核心组合技
刚接触C语言的开发者往往会在指针和函数这两个概念上栽跟头,而当它们组合在一起时,更会让人头皮发麻。但我要告诉你的是,指针与函数的组合恰恰是C语言最强大的特性之一。我在嵌入式系统开发中,90%的底层通信协议实现都依赖于这种技术组合。
指针函数(返回指针的函数)和函数指针(指向函数的指针)是两种完全不同的概念,但它们的应用场景却经常交叉。理解它们的区别就像区分"能打电话的手机"和"手机能打电话"——看似相似,实则本质不同。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指针函数:让函数返回内存地址
2.1 基本定义与声明
指针函数的本质是一个普通函数,只是它的返回值类型是指针。声明格式如下:
c复制类型说明符 *函数名(参数列表);
比如我们要创建一个返回整型指针的函数:
c复制int* createIntArray(int size) {
int* arr = (int*)malloc(size * sizeof(int));
return arr;
}
警告:永远不要返回局部变量的地址!因为局部变量在函数结束后会被销毁,返回的指针将指向无效内存。
2.2 典型应用场景
我在实际项目中常用指针函数处理以下场景:
- 动态内存分配(如上面的数组创建)
- 查找算法返回结果地址
- 工厂模式创建对象
一个查找函数的示例:
c复制Student* findStudentById(Student students[], int count, int id) {
for(int i = 0; i < count; i++) {
if(students[i].id == id) {
return &students[i];
}
}
return NULL; // 未找到返回空指针
}
3. 函数指针:将函数作为参数传递
3.1 定义与初始化
函数指针是指向函数的指针变量,声明语法有点特别:
c复制返回值类型 (*指针变量名)(参数列表);
例如,声明一个指向两数相加函数的指针:
c复制int (*addPtr)(int, int) = NULL;
初始
