2026/6/10 6:10:27
网站建设
项目流程
汕头市公司网站建设平台,深圳seo博客,wordpress怎么重新安装插件,东城响应式网站建设“指针是 C 语言的灵魂#xff0c;也是初学者的噩梦。” 你是不是也曾在 *、、- 中迷失方向#xff1f;别担心#xff01;今天通过 4 个亲手敲过的强化练习#xff0c;带你一步步揭开指针的神秘面纱——不仅看懂#xff0c;还能用它高效操作内存#xff01; 练习…“指针是 C 语言的灵魂也是初学者的噩梦。”你是不是也曾在*、、-中迷失方向别担心今天通过4 个亲手敲过的强化练习带你一步步揭开指针的神秘面纱——不仅看懂还能用它高效操作内存练习一用指针交换两个数问题为什么下面的代码不能交换a和bvoid 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 的朋友