C语言深入理解指针(四):玩转字符指针、函数指针与数组指针

宝子们,我们在指针的江湖已经驰骋了好几章啦,从指针基础、const 修饰、野指针 avoidance,到数组、二级指针和多维数组模拟,一路上升级打怪,相信指针的神秘面纱在大家眼里已经一层层揭开咯。今儿个,咱继续乘风破浪,探索字符指针、数组指针、二维数组传参、函数指针和转移表这些超实用又超有趣的指针应用!这可是把指针功力再升一级的关键,大家可千万别错过哦。

 

字符指针变量:解锁字符串的秘密花园

 

字符指针可是和字符串打交道的高手!我们先瞅瞅基础用法,比如有个字符变量`ch`,咱用字符指针`pc`指向它,就能通过指针操作字符啦。关键来了,还有个超常见的用法,就是用字符指针指向字符串常量。

 

const char* pstr = "hello bit.";

printf("%s\n", pstr);

 

这里呢,`pstr`存的是字符串首字符地址,不是把整个字符串塞进去哦。运行时,程序顺着这地址一路找到以`\0`结尾的字符串,才把"hello bit."打印出来。

 

我们平时用字符串函数,像`strcpy`、`strcmp`,其实背后都是靠字符指针在内存里跑来跑去操作字符串。理解了字符指针,操作字符串就不再是黑箱操作,而是有迹可循啦。

 

 

数组指针变量:批量操作数据的利器

 

数组指针可不是简单的指针数组哦,它是指向整个数组的指针!比如,定义一个指向 3 个 int 的数组指针:

 

int arr[3] = {1,2,3};

int (*parr)[3] = &arr;

 

`parr`存的就是数组 arr 的地址,通过它可以操作整个数组。这在传递多维数组给函数时超方便的,能原汁原味把多维数组结构带过去,不像普通指针还得在函数里手动还原数组维度。

 

 

二维数组传参的本质:指针的花式玩法

 

当二维数组作为函数参数时,它会退化成一个指向一维数组的指针。比如:

 

void printMatrix(int matrix[][COL_SIZE], int rows) { ... }

 

这里 matrix 实际上是一个指向长度为 COL_SIZE 的 int 数组的指针。通过这层指针魔法,函数内部就能轻松定位到矩阵的任一元素,二维数组的传递瞬间变得高效又便捷。

 

 

函数指针变量:让函数调用自由起来

 

函数指针能把函数的地址存起来,调用时直接通过指针就能执行函数。定义长这样:

 

return_type (*func_ptr)(param_types);

 

比如:

 

#include

 

int add(int a, int b) {

    return a + b;

}

 

int main() {

    int (*func)(int, int) = add;

    printf("%d", func(3,5)); // 输出 8

    return 0;

}

 

函数指针能动态选择调用哪个函数,把函数调用的自由度拉满,在回调函数、策略模式这些高级玩法里可是核心角色。

 

函数指针数组:批量管理函数的神器

 

要是有好多函数需要统一管理,函数指针数组就派上用场啦。定义像这样:

 

return_type (*func_ptrs[ARRAY_SIZE])(param_types);

 

比如:

 

#include

 

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

int sub(int a, int b) { return a - b; }

 

int main() {

    int (*funcs[2])(int, int) = {add, sub};

    printf("%d, %d", funcs[0](10,5), funcs[1](10,5)); // 输出 15,5

    return 0;

}

 

函数指针数组就是个函数仓库,需要哪个函数直接取出来用就行,写复杂程序时管理函数不要太方便。

 

 

转移表:程序流程的乾坤大挪移

 

转移表结合函数指针数组,能实现程序流程的灵活切换。比如状态机,不同状态对应不同处理函数,把处理函数指针存进数组,程序运行时根据当前状态从数组取对应函数执行,轻轻松松实现流程的动态转移,代码结构清晰又高效。

 

总结

宝子们,咱们今天把字符指针、数组指针、二维数组传参、函数指针和转移表这些进阶指针应用一网打尽啦。字符指针解锁了字符串操作的底层逻辑,数组指针和二维数组传参让多维数据传递不再是难题,函数指针和函数指针数组更是让函数调用变得灵动自如,转移表又是在此基础上实现复杂流程控制的点睛之笔。大家的指针功力肯定又精进了,是不是感觉代码世界豁然开朗呢?

 

宝子们,码到这里是不是对指针的应用场景又有新领悟啦?有没有哪个知识点让你直呼过瘾,或者还有些迷糊?函数指针数组和转移表的结合,你有没有想到新的应用场景?别藏着掖着,赶紧在评论区和大家分享你的新想法、新问题,一起把指针的边界再拓展拓展!下次,咱继续在指针的江湖里闯荡,不见不散哦!

 

你可能感兴趣的:(c语言,c语言)