2026/4/18 12:42:07
网站建设
项目流程
做网站大记事代码,建设网站教程全集,树莓派wordpress速度慢,做购物网站用服务器先看反例#xff1a;不用t会怎么样#xff1f;
假设我们想交换 a1 和 b2#xff0c;如果直接这么写#xff1a;
// 错误示范#xff1a;没有临时变量t
*a *b; // 把b的值#xff08;2#xff09;赋给a → 现在a2#xff0c;b2
*b *a; // 再把a的值#xff08;已…先看反例不用t会怎么样假设我们想交换a1和b2如果直接这么写// 错误示范没有临时变量t *a *b; // 把b的值2赋给a → 现在a2b2 *b *a; // 再把a的值已经变成2了赋给b → 最终a2b2结果是两个数都变成了 2原来的 a 的值1彻底丢了根本没完成交换再看正确逻辑t 的作用是 “暂存”t就是一个临时的 “小仓库”专门用来保存被覆盖前的值避免丢失int t *a; // 先把a的原始值1存到t里 → t1a1b2 *a *b; // 把b的值2赋给a → a2b2t1关键t还存着1 *b t; // 把t里的原始a值1赋给b → a2b1完成交换用生活例子理解你可以把这个过程想象成你有两个杯子A 杯装可乐B 杯装雪碧你想把 A 杯换成雪碧B 杯换成可乐如果直接把 B 杯的雪碧倒进 A 杯 → A 杯的可乐就没了之后再倒也只能倒雪碧所以你需要一个空杯子t先把 A 杯的可乐倒进t再把 B 杯的雪碧倒进 A 杯最后把t里的可乐倒进 B 杯 → 完美交换。回到代码里的 swap 函数void swap(int *a, int *b) { int t *a; // t 左指针位置的原始值比如0 *a *b, *b t; // 把右指针的非0值赋给左指针再把t里的0赋给右指针 }比如之前例子里交换nums[0]0和nums[1]1t nums[0]→t0nums[0] nums[1]→nums[0]1nums[1] t→nums[1]0最终实现[0,1]→[1,0]这一步没有t就做不到。总结t是临时变量核心作用是暂存被覆盖前的原始值避免交换时数据丢失直接互相赋值会导致其中一个值被覆盖无法完成真正的交换所有交换两个变量的场景不管是数字、数组元素几乎都需要这样的临时变量。