★★★指针数组,数组指针,指针函数,函数指针,二级指针,递归函数,回调函数,函数指针数组

1. 指针数组
概念:数组的每个元素都是指针(即存储地址的变量),数组本身是 “指针的集合”。
作用:用于存储多个地址,方便批量管理指针变量,适用于需要处理多个同类型指针的场景(如字符串数组)。
示例:int *arr[3];(定义一个包含 3 个 int 型指针的数组,每个元素可指向不同的 int 变量)。
2. 数组指针
概念:指向整个数组的指针,指针的类型与数组的类型一致(需指定数组长度)。
作用:用于指向并操作整个数组,确保指针移动时按数组整体大小偏移,常用于传递多维数组或精确控制数组访问。
示例:int (*p)[5];(定义一个指向 “包含 5 个 int 元素的数组” 的指针,p 指向数组首地址)。
3. 指针函数
概念:返回值为指针的函数,本质是 “函数”,其返回结果是一个地址。
作用:用于返回动态分配的内存地址、数组首地址等,方便函数向外部传递复杂数据(如字符串、数组)。
示例:int *func(int x) { ... }(函数 func 返回一个 int 型指针,可指向某个 int 变量或数组)。
4. 函数指针
概念:指向函数的指针,存储函数的入口地址,指针类型由函数的返回值和参数列表决定。
作用:实现函数的间接调用,支持动态选择执行的函数(如回调机制、状态机),提高代码灵活性。
示例:int (*p)(int, int);(定义一个指向 “参数为两个 int、返回值为 int 的函数” 的指针,p 可指向如add(int a, int b)的函数)。
5. 二级指针
概念:指向指针的指针,存储的是另一个指针变量的地址。
作用:用于间接修改指针变量的值(如函数中修改外部指针的指向),或处理指针数组、多维指针等复杂结构。
示例:int a = 10; int *p = &a; int **pp = &p;(pp 是二级指针,通过**pp可访问 a 的值)。
6. 递归函数
概念:在函数体内直接或间接调用自身的函数,需包含 “递归终止条件” 避免无限递归。
作用:将复杂问题分解为规模更小的同类子问题(如阶乘、斐波那契数列、树的遍历),代码简洁直观。
示例:计算阶乘的递归函数
int factorial(int n) {
    if (n == 0) return 1; // 终止条件
    return n * factorial(n-1); // 递归调用
}
7. 回调函数
概念:通过函数指针传递给另一个函数,并在该函数内部被调用的函数,即 “被回调的函数”。
作用:实现模块化设计,允许用户自定义函数逻辑并注入到通用框架中(如排序算法中的比较函数、事件处理)。
示例:通过回调函数实现自定义排序
void sort(int *arr, int len, int (*cmp)(int, int)) {
    // 排序逻辑中调用cmp函数比较元素
}
int ascending(int a, int b) { return a - b; } // 回调函数(升序)
sort(arr, 5, ascending); // 传入回调函数
8. 函数指针数组
概念:数组的每个元素都是函数指针,即 “存储多个函数入口地址的数组”,数组元素的函数指针类型需一致。
作用:批量管理同类型函数,实现多分支函数的快速调用(如菜单选择、状态机跳转)。
示例:
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int (*func_arr[2])(int, int) = {add, sub}; // 函数指针数组
func_arr[0](3, 2); // 调用add,返回5
posted @ 2025-12-12 16:29  Aino_D  阅读(1)  评论(0)    收藏  举报