
前言本篇笔记承接一维字符数组传参内容梳理指针高阶用法、指针函数 / 函数指针、const 修饰指针四种场景搭配课后作业实操适合刚学完数组、函数的 C 语言入门学习者内容全部来自课堂实操总结附带易错点、代码练习与课后综合作业可直接用于复习与面试基础复盘。一、一维字符型数组传参回顾字符数组作为函数参数本质是数组名退化为首元素指针两种传参写法完全等价// 写法1数组形式可读性高推荐新手 int fun(char pstr[]); // 写法2指针形式底层本质 int fun(char *pstr);遍历字符串两种实现方式指针自增遍历char str[32] hello c; char *p str; while (*p ! \0) { p; }数组下标遍历char str[32] hello c; int i 0; while (str[i] ! \0) { i; }核心结论str[i]和*(stri)完全等价数组下标只是指针运算的语法糖。二、指针函数 VS 函数指针极易混淆重点区分2.1 指针函数返回值是指针的函数核心概念主体是函数只是函数执行完毕后返回一个内存地址指针类型。 语法格式数据类型 *函数名(形参列表);示例// 返回int*类型指针 int *fun(int x, int y); // 返回char*字符串指针 char *fun(void);致命易错点指针函数绝对不能返回局部变量的地址局部变量存储在栈区函数执行结束后栈空间会被系统回收返回其地址会产生野指针访问直接程序崩溃。合法使用场景返回全局字符数组、静态 static 数组、字符串常量地址。2.2 函数指针指向函数代码段的指针核心概念主体是指针变量专门存放函数在文本区的起始地址可用来回调函数、实现多态。 基础语法返回值类型 (*指针名)(参数类型列表);示例文中未展开补充基础理解方便后续拓展// 定义函数指针pFun指向无参、int返回值的函数 int (*pFun)(void);三、const 修饰指针的 4 种场景面试必考const含义为只读readonly修饰位置不同限制对象完全不同分四类对比记忆1.const int *p;/int const *p;二者完全等价const修饰*p指针指向的内容指针变量p本身可以修改可重新指向别的变量*p只读不能通过指针修改内存中的值int a 10, b 20; const int *p a; p b; // 合法修改指针指向 *p 100; // 非法无法修改指向内容2.int *const p;const修饰指针变量p本身指针p的指向固定定义时必须初始化不能重新赋值指向其他变量可以通过*p修改指向空间的数据int a 10; int *const p a; p b; // 非法指针指向不可修改 *p 100; // 合法修改内存值3.const int *const p;/int const *const p;双重 const 限制二者等价指针p不能更换指向指针指向的内容也不能修改定义时必须初始化完全只读多用于保护常量字符串int a 10; const int *const p a; p b; // 非法 *p 100; // 非法快速记忆口诀*左边 const内容不可改指针随便指*右边 const指针不能换内容随便改两边都加 const指针、内容全只读四、课后综合作业配套知识点实操作业 1字符串库函数手动封装禁用 string.h 库函数要求封装 4 个自定义函数mystrlen、mystrcpy、mystrcat、mystrcmp额外实现字符串倒置函数mystrlen统计字符串有效长度不含末尾\0mystrcpy将源字符串完整拷贝到目标字符数组mystrcat拼接两个字符串在目标数组末尾追加源字符串mystrcmp逐字符比较两个字符串返回正负 / 0 表示大小相等strReverse将传入字符串原地倒置作业 2数字各位求和函数封装需求传入任意整数返回数字每一位相加总和 例输入 13542计算 1354215返回 15 解题思路循环取模 %10 得到个位再除以 10 去掉个位直到数字变为 0作业 3最大公约数 最小公倍数函数封装需求终端输入两个整数封装函数同时算出最大公约数、最小公倍数并打印作业 4数组综合处理冒泡排序专项分三个独立函数实现模块化InputArray接收 10 个数字存入数组BubbleSort冒泡排序升序排列数组OutputArray遍历打印数组所有元素 函数原型参考int InputArray(int *parray, int len); int BubbleSort(int *parray, int len); int OutputArray(int *parray, int len);作业 5水仙花数判断水仙花数定义三位数每一位数字立方相加等于自身例1531³5³3³ 拓展练习遍历打印全部三位水仙花数输入数字判断是否为水仙花数作业 6分段函数计算终端输入 i根据三段公式计算 y 值并打印i 5y 123...i5 ≤ i 10y 100 - (i-1)-(i-2)-...-1i ≥ 10y i*i作业 7不定个数数字求平均值持续从终端输入数字输入 - 1 代表结束计算所有有效数字平均值作业 8闰年判断输入年份区分普通闰年、世纪闰年规则普通闰年能被 4 整除不能被 100 整除世纪闰年能被 400 整除 符合任意一条即为闰年否则平年作业 9几何计算引入 math 数学库输入圆半径计算周长、面积输入三角形三边海伦公式求面积编译注意使用 sqrt 开平方函数gcc 编译必须加-lm参数 编译指令示例gcc test.c -o test -lm作业 10数字拆分拼接给定两个两位数 37、64按规则拼接出新四位数 3476千位第一个数十位37→3百位第二个数个位64→4十位第一个数个位37→7个位第二个数十位64→6 最终拼接结果3 4 7 6 → 3476五、学习易错点总结字符数组传参不要混淆数组与指针数组名仅在 sizeof、 操作时代表完整数组其余场景退化为指针指针函数严禁返回局部栈变量地址会产生野指针const 指针区分核心看 const 在*左右不要死记硬背结合代码测试理解字符串操作必须预留\0结束符数组空间长度要大于实际字符数量防止内存越界math 库 sqrt 函数编译必须携带 - lm 链接数学库否则编译报错数组传递本质传递首地址函数内修改数组元素会直接影响外部原数组。结尾指针是 C 语言的灵魂指针函数、const 指针更是笔试面试高频考点建议每道作业独立手写代码运行调试不要复制粘贴。先吃透字符串手动封装函数再练习数字、数组相关综合案例循序渐进夯实指针与函数结合的核心逻辑。