news 2026/4/18 7:05:50

别再怕指针了!4 个经典 C 语言指针练习,带你从“晕针”到“玩转”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再怕指针了!4 个经典 C 语言指针练习,带你从“晕针”到“玩转”

“指针是 C 语言的灵魂,也是初学者的噩梦。”
你是不是也曾在*&->中迷失方向?别担心!今天通过4 个亲手敲过的强化练习,带你一步步揭开指针的神秘面纱——不仅看懂,还能用它高效操作内存!


练习一:用指针交换两个数

问题:为什么下面的代码不能交换ab

void swap(int a, int b) { ... }

答案:因为传的是值的副本!函数内部修改的是副本,不影响原变量。

✅ 正确做法:传地址!

void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }

👉关键理解

  • *a不是“a 的值”,而是“a 所指向位置的值”。

  • 通过地址,我们直接修改了主函数中的变量!

💡 小提醒:C 语言没有“引用”,int &a是 C++ 特性哦!


练习二:指针遍历数组求和

在 C 语言中,数组名就是首元素的地址

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p = arr; // p 指向 arr[0] int sum = 0; for (int i = 0; i < 10; i++) { sum += *p; p++; // 指针自动跳到下一个 int! }

👉神奇之处

  • p++不是加 1 字节,而是加sizeof(int)字节!

  • 这就是指针算术(Pointer Arithmetic)的力量。

📌 补充:*(p + i)等价于p[i],甚至i[p]在语法上也合法(虽然不推荐 😅)。


练习三:双指针原地反转字符串

想把"Hello World"变成"dlroW olleH"?不用新数组!

void reverse_str(char *str) { char *left = str; char *right = str + strlen(str) - 1; // 跳过 '\0' while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } }

👉双指针技巧

  • 一个从头,一个从尾,边走边换,直到相遇。

  • **空间复杂度 O(1)**,效率拉满!

⚠️ 注意:必须用char str[] = "Hello World";定义可修改的字符数组。
如果直接传字符串字面量(如reverse_str("abc")),程序可能崩溃(因为字面量在只读内存区)!


练习四:返回最大值的地址,并修改它!

函数不仅能返回值,还能返回地址

int *find_max(int *arr, int len) { int *max_p = arr; // 假设第一个最大 for (int i = 1; i < len; i++) { if (*(arr + i) > *max_p) max_p = arr + i; } return max_p; // 返回最大值的地址! }

调用后:

int arr[] = {1, 2, ..., 10}; int *p = find_max(arr, 10); printf("最大值:%d\n", *p); *p = 999; // 直接修改原数组! printf("修改后:%d\n", *p);

👉指针的终极威力

  • 拿到地址,就拥有了对那块内存的读写权

  • 但切记:不要返回局部变量的地址(会变成悬空指针)!


总结:指针到底是什么?

概念说明
int *p;p 是一个指针,存储某个int变量的地址
&a取变量 a 的地址
*p解引用:访问 p 所指向的内存中的值
p++指针移动到下一个同类型元素(不是 +1 字节!)

✅ 指针让 C 语言既灵活又高效,但也要求你对自己写的每一行负责!


互动时间 🎯

你第一次学指针时卡在哪一步?
*&分不清?还是怕“野指针”?

欢迎在评论区分享你的“指针故事”
如果你觉得这 4 个练习有帮助,别忘了点赞 + 转发给正在学 C 的朋友!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:14:00

终极指南:3步掌握B站Windows视频播放器

想要在Windows电脑上享受更优雅的B站观看体验吗&#xff1f;这款专为Windows系统设计的B站客户端应用&#xff0c;提供了超越网页版的使用感受。作为一款优秀的Windows应用&#xff0c;它完美解决了传统浏览器播放的各种不便。 【免费下载链接】BiliBili-UWP BiliBili的UWP客户…

作者头像 李华
网站建设 2026/4/17 20:55:39

SteamShutdown智能关机助手:让电脑在游戏下载完成后自动休息

SteamShutdown智能关机助手&#xff1a;让电脑在游戏下载完成后自动休息 【免费下载链接】SteamShutdown Automatic shutdown after Steam download(s) has finished. 项目地址: https://gitcode.com/gh_mirrors/st/SteamShutdown SteamShutdown是一款专为Steam平台用户…

作者头像 李华
网站建设 2026/4/16 14:03:37

终极指南:XLeRobot强化学习环境快速入门与实战技巧

还在为实体机器人训练成本高昂、调试过程繁琐而头疼吗&#xff1f;XLeRobot项目为你提供了完美的解决方案——一个功能强大的强化学习仿真环境&#xff0c;让你在个人电脑上就能轻松开展机器人训练。本文将带你从零开始&#xff0c;快速掌握这个开源强化学习平台的核心功能和使…

作者头像 李华
网站建设 2026/4/17 13:53:41

如何用EmotiVoice生成带口音的区域化语音?

如何用 EmotiVoice 生成带口音的区域化语音&#xff1f; 在智能语音助手越来越“标准”的今天&#xff0c;你是否也曾怀念过街头巷尾那口地道的方言腔调&#xff1f;一声“侬好”里的软糯吴语&#xff0c;一句“巴适得板”中的川渝热辣——这些充满地域温度的声音&#xff0c;恰…

作者头像 李华
网站建设 2026/4/17 11:11:02

EmotiVoice本地部署教程:在私有服务器上运行情感TTS

EmotiVoice本地部署教程&#xff1a;在私有服务器上运行情感TTS 在虚拟主播深夜直播、智能客服温柔致歉、有声书自动演绎悲欢离合的今天&#xff0c;语音合成早已不再是“机器念稿”的代名词。用户期待的是能传递情绪、带有温度的声音——而这种需求&#xff0c;正在推动TTS技术…

作者头像 李华
网站建设 2026/4/14 2:54:00

2026年游戏开发黄金赛道深度解析

在即将到来的2026年&#xff0c;游戏开发领域的增长动力正发生结构性转移。市场分析报告指出&#xff0c;元宇宙应用、沉浸式VR体感互动与功能化教育游戏三大板块已确立其增长优势&#xff0c;预计年复合增长率分别为29.3%、25%和20%&#xff0c;正共同构成驱动未来市场发展的核…

作者头像 李华