c语言指针练习题 前面学了指针的一些运算和指针的类型所以写一些题来巩固一下。第一题定义函数实现交换两个变量的值 函数原型 void exchange(int *, int *)刚开始不用指针写我写的是这种但是写完运行发现num1和num2的值根本没有交换。核心原理C 语言默认是值传递把num1的值拷贝一份给形参a 把num2的值拷贝一份给形参b。a、b是exchange函数内部局部变量在函数自己的栈空间和 main 里面的num1、num2是完全独立两份内存。函数里面交换的只是拷贝出来的副本a和b。函数执行结束a、b直接销毁。完全碰不到 main 函数里面原始的 num1、num2。 所以 main 里面num1、num2保持原样。输出num1 123,num2 322没有交换。所以才用指针的形式传入两个变量的地址通过改变地址所对用的值从而实现值的交换#include stdio.h // 定义函数 void exchange(int *a, int *b) { int c *a; *a *b; *b c; } int main() { int num1 123; int num2 322; exchange(num1,num2); printf(num1 %d,num2 %d \n,num1,num2); return 0; }总结exchange 内部的局部变量函数调用结束栈回收就销毁。值传递只能操作副本。 传入 num1、num2 的地址函数内通过解引用*跨函数访问 main 中的原始内存交换原始变量的值。虽然指针形参 a、b 调用结束销毁但原始变量已经完成修改。第二题定义一个函数接收数组名或首元素指针 和 数组长度 作为参数计算数组的平均数函数原型 int get_avg(int *, int);#include stdio.h int get_avg(int *arr, int len) { int sum 0; for (int i 0; i len; i) { sum arr[i]; } return sum / len; } int main() { int num[] {10, 20, 30, 40, 50}; int len sizeof(num) / sizeof(num[0]); printf(avg %d \n, get_avg(num, len)); return 0; }这里平均数不会有小数但是换成其他值就可能会出现小数所以把自定义函数的类型改掉再把返回值转换为double的形式或者在sum前面乘个1.0第三题定义函数接收一个字符串和字符统计字符在字符串中出现的次数函数原型: int char_count(char *, char)#include stdio.h #include string.h int char_count(char *msg, char ch) { int count 0; int len strlen(msg); // for循环用法 /* for (int i 0; i len; i) { if (ch msg[i]) { count 1; } } */ //while用法 while(*msg!\0) { if (*msg ch) { count; } *msg; } return count; } int main() { char msg[] Shanghai; printf(count %d, char_count(msg, a)); return 0; }这里采用while循环的做法遍历到‘\0’就自动停止循环在循环中加上判断语句从而实现统计字母出现的次数。这里用for循环也可以但是要计算数组的长度。第四题定义函数返回某个字符在字符串中第一次出现的位置函数原型: int firstIndex(char *, char)#include stdio.h #include string.h /** * brief 返回某个字符在字符串中第一次出现的位置如果找不到返回-1 * * param str 要统计字符串 * param ch 要查找字符串 * return int 字符在字符串中第一次出现的位置 */ int firstIndex(char *str, char ch) { int len strlen(str); for (int i 0; i len; i) { if (str[i] ch) { return i; } } return -1; } int main() { char string[] hello world; char character o; int index firstIndex(string, character); printf(index %d,index); return 0; }这题就很简单了进行循环找到下标结束循环即可第五题定义函数返回某个字符在字符串中最后一次出现的位置函数原型: int lastIndex(char *, char)这题就上一题的题目变化一下这题是找到最后一个字符只要等循环进行完记录小标就好了int firstIndex(char *str, char ch) { size_t len strlen(str); int index -1; for (size_t i 0; i len; i) { if (str[i] ch) { index (int)i; } } return index; } int main() { char string[] hello world; printf(index %d\n, firstIndex(string, a)); printf(index %d\n, firstIndex(string, o)); printf(index %d\n, firstIndex(string, l)); return 0; }第六题6. 定义函数 实现字符串中小写字母转大写字母函数原型: char *upperCase(char *)#include stdio.h #include string.h char *upperCase(char *str) { while (*str ! \0) { if (*str a *str z) { *str - 32; } str; } return str; } int main() { char string[] Hello_World; printf(str %s,upperCase(string)); return 0; }运行完程序发现输出的值是一个空格这是为什么呢因为最后返回的值是str;就算循环正常跑完str指针已经走到末尾\0的地址。 返回字符串结束符的地址printf(%s)从\0开始打印输出空啥都看不到。解决循环一开始用一个临时指针记住原始开头地址。char *start str; //保存字符串最开始的首地址循环移动str最后return start;返回开头地址。还有另一种方法用for循环来写因为while循环中str改变了原来指针的用for循环原始的指针不会被改变#include stdio.h #include string.h char *upperCase(char *str) { size_t len strlen(str); for (size_t i 0; i len; i) { if (str[i]a str[i]z) { str[i]-32; } } return str; } int main() { char string[] Hello_World; printf(str %s,upperCase(string)); return 0; }核心总结for 循环用下标 i 遍历原始指针 str 不会被修改天然不会跑到末尾return str 直接就是开头地址。while 直接操作传入的str指针str会把原始指针往后推如果不提前备份首地址return 就返回末尾。但是呢用了for之后会把原来的值给覆盖掉。。。

相关新闻

最新新闻

OpenCV与YOLO:零基础两个月完成计算机视觉毕业设计

OpenCV与YOLO:零基础两个月完成计算机视觉毕业设计

如果你希望在两个月内从零入门计算机视觉,并完成一篇结合AI技术的交叉学科论文或毕业设计,那么OpenCV与YOLO的组合是一个极具可行性的技术路径。这个方案的核心优势在于:它不要求你具备深厚的数学或算法背景,而是通过成熟的工具库…

2026/8/23 20:01:50
智能体面试准备(五十):智能体的对话交互与用户建模——从状态跟踪到个性化记忆

智能体面试准备(五十):智能体的对话交互与用户建模——从状态跟踪到个性化记忆

智能体面试准备(五十):智能体的对话交互与用户建模——从状态跟踪到个性化记忆 引言:能答不等于懂你 前面 B12 讲了 ReAct、B13 讲了持久化记忆、B22 讲了长时任务断点续跑、B27 讲了人机协作 HITL、B33 讲了自我改进。这一篇聚焦…

2026/8/23 20:01:50
数学建模实战:基于LNS与VRPTW的疫情物资配送优化方案

数学建模实战:基于LNS与VRPTW的疫情物资配送优化方案

1. 项目概述与核心问题拆解“COVID-19疫情期间生活物资的科学管理问题”是2022年中国研究生数学建模竞赛的F题。这个题目一出来,当时就在我们建模圈子里引起了不小的讨论,因为它太“接地气”了。它不像一些纯理论优化题那样飘在空中,而是把一…

2026/8/23 20:01:50
AI代理持续学习实战:自蒸馏技术让智能体自我进化

AI代理持续学习实战:自蒸馏技术让智能体自我进化

最近在AI工程圈里,一个词被反复提起: AI代理(AI Agent) 。无论是GitHub上涌现的各类Agent框架,还是SWE-bench榜单上你追我赶的代码助手,都指向一个趋势——让AI像工程师一样,自主规划、执行、…

2026/8/23 20:01:50
离散型随机变量解题框架:从建模到计算,攻克A-Level概率难题

离散型随机变量解题框架:从建模到计算,攻克A-Level概率难题

去年带一个学生准备A-Level数学考试,他卡在离散型随机变量这个章节,不是不会算期望和方差,而是每次遇到实际应用题就不知道该怎么把文字描述转化成概率分布表。他指着课本上的例题问我:“老师,我知道公式,但…

2026/8/23 20:01:50
RAG技术面试核心考察点与应对策略

RAG技术面试核心考察点与应对策略

1. RAG技术面试的核心考察点最近在技术社区看到不少同行讨论RAG(检索增强生成)相关的面试经历,发现很多候选人在这个环节表现不佳。作为经历过多次RAG项目实战的老兵,我想分享几个面试官最爱深挖的问题方向。RAG面试的核心考察点通…

2026/8/23 19:56:50