c语言学习笔记:指针进阶

📅 2026/8/6 3:13:53
c语言学习笔记:指针进阶
今天继续整理 C 语言笔记从指针数组开始一直到函数指针。这部分内容确实比较绕但也是 C 语言的精髓所在我把核心概念和代码演示梳理了一下。一、指针数组首先得搞清楚指针数组本质上是数组只不过数组里存的元素都是指针。定义int *a[5]; 表示定义了一个包含 5 个元素的数组每个元素都是 int * 类型。初始化常用于保存多个字符串的首地址。区别它和二维字符数组不同。二维数组存的是字符串本身而指针数组存的是字符串常量的地址。如果要操作多个字符串用指针数组更灵活。代码演示// 定义一个指针数组存放3个字符串常量的地址char *pstr[3] {hello, world, how};// 访问pstr[0] 就是 hello 的首地址printf(%sn, pstr[0]); // 输出 helloprintf(%sn, pstr[1]); // 输出 world二、二级指针二级指针本质还是指针它保存的是指针变量的地址。场景主要用在想在被调函数中修改主调函数里的指针变量时实参就需要传指针变量的地址形参用二级指针接收。关联指针数组的数组名本质上也是一个二级指针。代码演示void change_ptr(char **pptr) {// *pptr 就是主函数里的 ptr通过二级指针修改它指向的地址*pptr world;}int main() {char *ptr hello;printf(%sn, ptr); // 输出 hellochange_ptr(ptr); // 传入指针变量的地址printf(%sn, ptr); // 输出 world指针 ptr 本身被修改了return 0;}三、指针函数这个概念相对简单它本质是函数只是返回值是一个指针。注意千万不要返回局部变量如局部数组的地址因为函数结束时局部变量空间会被回收。可以返回静态变量地址、全局变量地址、字符串常量地址或者是通过参数传进来的地址。代码演示// 返回一个字符串常量的地址这是安全的char *get_string() {return hello world;}int main() {char *str get_string();printf(%sn, str); // 输出 hello worldreturn 0;}四、函数指针这是最抽象的一个概念它本质是指针指向的是函数的入口地址。定义int (*pfun)(int, int); 定义了一个指针变量它可以指向一个返回值为 int、有两个 int 参数的函数。使用把函数名赋值给函数指针然后通过 函数指针名(实参) 来调用函数。应用最经典的应用就是回调函数把函数作为参数传递能有效降低代码耦合度。代码演示int add(int a, int b) {return a b;}int main() {// 定义函数指针 pfun并指向 add 函数int (*pfun)(int, int) add;// 通过函数指针调用函数int result pfun(3, 4);printf(result %dn, result); // 输出 result 7return 0;}这部分内容逻辑性很强多画图理解内存模型会清晰很多。整理完这些C 语言的基础部分就算告一段落了。